#pragma once
#include "Actor.h"
#include "Character.h"
#include "CSAuth.h"
#include "HostPathFinder.h"
#include "CHuntingList.hpp"
#include "CMobileEvent.hpp"
#include "PollTimer.h"
#include "CPubScheduler.h"
#include "CPCBattle.hpp"
#include "PCClientUpdater.h"
#include "CPCHireItemCtrl.hpp"
#include "CPCItem.hpp"
#include "PCItemInventoryMgr.h"
#include "PCPacketHandler.h"
#include "CPCProperty.hpp"
#include "PCSkill.h"
#include "PCQuestEvent.h"
#include "StorePasswordDB.h"
#include "TimeList.h"
#include "MannerPointInfo.hpp"
#include "enum.hpp"
#include "struct.hpp"
#include "std/list"
#include "std/map"
class CNPC;
class CNpcPet;


class CPC : public CActor
{
	struct vtable_t // const CPC::`vftable'
	{
		void* (CPC::* scalar_deleting_destructor)(unsigned int flags);
		int (CCharacter::* GetType)(void);
		void (CCharacter::* AddErrorCount)(const char* filename, int line, DWORD count, DWORD time);
		void (CCharacter::* AddErrorCount2)(DWORD count, DWORD time);
		void (CActor::* Init)(void);
		int (CPC::* GetWeaponProperty)(int position, int isArrowProperty);
		bool (CCharacter::* IsActor)(void);
		int (CCharacter::* IsItPossible)(int property);
		int (CPC::* IsSiegeMode)(void);
		unsigned long (CPC::* GetAccountID)(void);

		int (CPC::* OnMsg)(CCharacter* sender, CCharacter* receiver, unsigned long msgID, int par1, int par2, int par3, MSGpar::CVar par4);
		int (CPC::* GetParameterValue)(unsigned short id, int& value);
		int (CPC::* UpdateParameterValue)(unsigned short id, int value);
		void (CPC::* InsertCommand)(COMMAND_QUEUE* command);
		void (CPC::* CheckCommandQueue)(void);
		void (CPC::* DisableCommand)(unsigned long commandID);
		COMMAND_QUEUE* (CPC::* SearchCommand)(unsigned long commandID);
		int (CPC::* IsMyArea)(CCharacter* ch, int range);
		unsigned long (CPC::* GetState)(void);
		int (CPC::* GetScale)(void);

		int (CPC::* IsTarget)(CCharacter* ch, unsigned long flag);
		int (CPC::* IsDamageMotionPossible)(void);
		int (CPC::* IsRightProperty)(int property);
		int (CPC::* IsAvoidable)(int race, int _class, int level);
		int (CPC::* IsInitingState)(void);
		int (CPC::* IsLucky)(void);
		void (CPC::* OnShowEffect)(int effect);
		void (CPC::* OnShowEffect3)(int effect, int numdata);
		int (CPC::* GetEffectState)(void);
		void (CPC::* OnMsgFromItemServer)(unsigned long in_loc, CITZMsg* flag);

		void (CPC::* ReduceSPByUseSkill)(int sp);
		bool (CPC::* IsExistItem)(int itemID, int count, bool isExternalEffect);
		bool (CPC::* ConsumeItemByUseSkill)(int itemID, int count, bool isExternalEffect);
		short (CPC::* GetAttackSuccessPercent)(CCharacter* other, int isRangeAttack);
		int (CPC::* GetAttackFinalDamage)(ATTACK_INFO* info);
		int (CPC::* SkillAttack)(SKILLATTACK_MSG* msg, int plusATTPowerPercent, int plusATTSuccessPercent, const bool in_bHideSkill);
		short (CPC::* SplashAttack)(int val1, short xPos, short yPos, int type, int range, int rangeIn, unsigned long exceptAID, void* msgDataPtr, int val2, int count);
		int (CPC::* SplashAttack2)(int plusATTPower, PosInfo dest, int type, int halfWidth, int height, MSG_TYPE1_TWODWORD* msgData, int count, int plusHitPercent, PosInfo* specialSrc);
		int (CPC::* SetHandicapState)(int state, CCharacter* other, int percent, int preDelayTime, int delayTime, int isSpell, int isFixedDelayTime);
		int (CPC::* GetModifiedTargetItemDEF)(CCharacter* target);

		int (CPC::* GetModifiedTargetItemMDEF)(CCharacter* target);
		int (CPC::* SetEffective)(int index, int time, int val1, int val2, int val3, int isSendClient);
		int (CCharacter::* GetEffective)(int index, int enumVal);
		void (CCharacter::* UpdateEffective)(int index, int val, int enumVal);
		void (CPC::* ResetEffective)(int index, int val);
		bool (CCharacter::* IsEnableSetEffective)(int index, int time, int val);
		bool (CPC::* IsGroundEffective)(int index, int& SKID, bool& isPlaySolo);
		void (CPC::* ProcessGroundEffective)(int par1, int par2, bool par3);
		void (CCharacter::* ProcessCheckEffective)(int index, EFFECTIVE_INFO* info);
		void (CPC::* SetOnShowEFST)(int value);

		void (CPC::* SetOffShowEFST)(int value);
		void (CPC::* OnChangeStatusAmount)(int SKID, unsigned short type, unsigned long time, int amount);
		void (CPC::* NotifyStatusAmount)(unsigned short type, int amount);
		char (CPC::* GetCampID)(void);
		void (CPC::* SetCampID)(char campID);
		const char* (CPC::* GetNamePtr)(void);
		short (CPC::* GetHealthState)(void);
		void (CPC::* ResetHealthState)(short state);
		void (CPC::* SetEffectStateTimeInfo)(unsigned long time, int state);
		void (CPC::* ResetEffectState)(int state);

		void (CPC::* SetEffectState)(int state);
		int (CPC::* GetBodyItemCount)(unsigned short id, int& value);
		int (CPC::* UpdateBodyItemCount)(unsigned short id, int count, bool isidentified);
		int (CPC::* UpdateBodyItemCountByNPC)(unsigned short id, int count, bool isidentified);
		void (CPC::* SkillUseAck)(unsigned short SKID, unsigned short NUM, bool result, unsigned char cause);
		void (CPC::* ModifyAttackPowerByEffective)(CCharacter* ch, int attackProperty, int& damage);
		void (CPC::* ApplyExtraDEF)(int& def, CCharacter* in_cpAtkerCH);
		void (CPC::* ApplyExtraMDEF)(int& def);
		void (CPC::* SetSkillSinglePostDelay)(unsigned short SKID, unsigned long delaytime);
	};

public:
	enum enumDisconnectStep
	{
	  DISCONNECTSTEP_NONE                  = 0x0,
	  DISCONNECTSTEP_ARRANGE               = 0x1,
	  DISCONNECTSTEP_ASYNCDB_SAVE_REQUEST  = 0x2,
	  DISCONNECTSTEP_ASYNCDB_SAVE_WAIT     = 0x3,
	  DISCONNECTSTEP_ASYNCDB_SAVE_COMPLETE = 0x4,
	  DISCONNECTSTEP_COMPLETE              = 0x5,
	  DISCONNECTSTEP_REMOVE                = 0x6,
	};

	/* this+   0 */ public: //CActor baseclass_0;
	/* this+ 356 */ private: enum enumDisconnectStep m_DisconnectStep;
	/* this+ 360 */ private: CPCHireItemCtrl m_HireItemCtrl;
	/* this+ 380 */ public: mystd::list<int> m_captureItemList;
	/* this+ 392 */ public: int m_useIncubator;
	/* this+ 396 */ public: bool m_isPetOwner;
	/* this+ 400 */ public: CharacterInfo m_characterInfo;
	/* this+1920 */ public: CharacterTimeInfo m_characterTimeInfo;
	/* this+2040 */ public: PLUSSTATUS_BYJOB m_plusStatusByJob;
	/* this+2064 */ public: CPollTimer m_emoticonTM;
	/* this+2072 */ public: int m_isMapLoading;
	/* this+2076 */ public: unsigned long m_MapLoadingTick;
	/* this+2080 */ public: int m_invalidPacket;
	/* this+2084 */ public: int m_isValid;
	/* this+2088 */ public: int m_isPKModeON;
	/* this+2092 */ public: int m_index;
	/* this+2096 */ public: unsigned long m_ip;
	/* this+2100 */ public: unsigned long m_lastNPCAID;
	/* this+2104 */ public: short m_npcTouchCount;
	/* this+2106 */ public: short m_lastCardIndex;
	/* this+2108 */ public: int m_isItemMovable;
	/* this+2112 */ public: int m_isAuctionOpen;
	/* this+2116 */ public: int m_isMailOpen;
	/* this+2120 */ public: int m_isTraderOpen;
	/* this+2124 */ public: mystd::list<unsigned long> m_groupMember;
	/* this+2136 */ public: mystd::map<mystd::string,unsigned long> m_whisperExRegister;
	/* this+2148 */ public: CHostPathInfo m_pathInfo;
	/* this+2204 */ public: CPCClientUpdater m_pcClientUpdater;
	/* this+2216 */ public: CPCItem m_pcItem;
	/* this+2248 */ public: CPCItemInventoryMgr m_pcitemInventoryMgr;
	/* this+3020 */ public: CPCSkill m_pcSkill;
	/* this+3468 */ public: CPCPacketHandler m_packetHandler;
	/* this+3628 */ public: CPCBattle m_pcBattle;
	/* this+5788 */ public: EXCHANGEITEM_INFO m_exchangeItemInfo;
	/* this+5800 */ public: MannerPointInfo m_mannerPoint;
	/* this+5820 */ public: mystd::list<unsigned long> m_touchNPCList;
	/* this+5832 */ public: mystd::vector<ENEMY_INFO> m_enemyInfo;
	/* this+5848 */ public: CPCQuestEvent m_questEvent;
	/* this+5916 */ public: mystd::map<unsigned long,MSG_TYPE2_THREEDWORD> m_disappearHP_ItemList;
	/* this+5928 */ public: mystd::map<unsigned long,MSG_TYPE2_THREEDWORD> m_disappearSP_ItemList;
	/* this+5940 */ public: int m_skillUseRefCounter;
	/* this+5944 */ public: int m_lockCounter;
	/* this+5948 */ public: unsigned long m_lastSendTime;
	/* this+5952 */ public: unsigned long m_loadingCompleteTime;
	/* this+5956 */ public: unsigned long m_DisconnetTime;
	/* this+5960 */ public: int m_pvpWinPoint;
	/* this+5964 */ public: int m_pvpRanking;
	/* this+5968 */ public: unsigned long m_pvpFGStratTime;
	/* this+5972 */ public: int m_pvpTotal;
	/* this+5976 */ public: int m_myPetID;
	/* this+5980 */ public: bool m_isProgress;
	/* this+5984 */ public: unsigned long m_gageRefreshTime;
	/* this+5988 */ public: int m_eventNo;
	/* this+5992 */ public: int m_makingItemFlag;
	/* this+5996 */ public: mystd::list<unsigned long> m_devotionList;
	/* this+6008 */ public: unsigned long m_magicTargetAID;
	/* this+6012 */ public: PARTNER_INFO m_marriageInfo;
	/* this+6044 */ public: int m_specialSP;
	/* this+6048 */ public: int m_specialDeath;
	/* this+6052 */ public: mystd::map<unsigned long,unsigned long> m_invincibleInfo;
	/* this+6064 */ public: unsigned long m_lastTargetAID;
	/* this+6068 */ public: mystd::map<unsigned long,PalmStrikeInfo> m_palmstrikeList;
	/* this+6080 */ public: CMobileEvent m_mobileEvent;
	/* this+6144 */ public: FAMILY_INFO m_familyInfo;
	/* this+6240 */ public: PCBANG_INFO m_PCBangInfo;
	/* this+6288 */ public: int m_noPointEvent;
	/* this+6292 */ public: PVPINFO m_pvp;
	/* this+6304 */ public: int m_makerRankPoint;
	/* this+6308 */ public: int m_makerAMPoint;
	/* this+6312 */ public: int m_isLessEffect;
	/* this+6316 */ public: PKInfo m_PKInfo;
	/* this+6400 */ public: CCSAuth2 m_GameGuardAuth;
	/* this+6444 */ public: int m_isSetGameGuard;
	/* this+6448 */ public: unsigned long m_lastGameGuardCheckTime;
	/* this+6452 */ public: _STORE_PASSWORD_INFO m_storePasswordInfo;
	/* this+6476 */ public: _CASHSHOP_PASSWORD_INFO m_CashPasswordInfo;
	/* this+6500 */ public: _LOTTO_NUMBERS m_lottoNumbers;
	/* this+6528 */ public: short m_cookSucc_Tool;
	/* this+6532 */ public: CHuntingList m_huntingList;
	/* this+6548 */ public: CTimeList m_timeList;
	/* this+6564 */ public: CPCProperty* m_pcproperty;
	/* this+6568 */ public: BATTLEFIELDINFO m_battleFieldInfo;
	/* this+6580 */ public: long m_clientVersion;
	/* this+6584 */ public: int isInitSendGameGuard;
	/* this+6588 */ public: int m_CashPoint;
	/* this+6592 */ public: int m_itemScriptEventNo;
	/* this+6596 */ public: bool m_isSetEffectiveBySpecialItem;
	/* this+6600 */ public: unsigned long m_scrollItemIndex;
	/* this+6604 */ public: bool m_open_simpleCashShop;
	/* this+6608 */ public: CPubScheduler m_PubScheduler;
	/* this+6624 */ private: mystd::map<int,DWORD> m_scriptTimeMap;

	public: CPC::CPC(void);
	public: virtual CPC::~CPC(void);
	public: virtual int CPC::GetWeaponProperty(int position, int isArrowProperty);
	public: virtual int CPC::IsSiegeMode(void);
	//public: int CPC::SkillAttackExt(SKILLATTACK_MSG*, int, int, const bool);
	//public: const int CPC::GetMapID(void);
	public: void CPC::ForceMapMove_To_RestartMap(void);
	//public: bool CPC::IsPartyJoinMSGRefuse(void);
	public: bool CPC::IsOpenEquipmentWin(void);
	public: void CPC::SetDisconnectStep(const enum CPC::enumDisconnectStep in_Step);
	public: const enum CPC::enumDisconnectStep CPC::GetDisconnectStep(void);
	public: CPCClientUpdater* CPC::GetClientUpdaterPtr(void);
	public: void CPC::AsyncSaveBodyItem(void);
	public: void CPC::AsyncSaveStore(void);
	public: void CPC::AsyncSaveCart(void);
	public: void CPC::AsyncSaveCharacterInfo(const int in_callfunc);
	public: void CPC::AsyncLoadStore(void);
	public: void CPC::AsyncLoadCart(CCharacter* const in_pSender);
	public: void CPC::AsyncSaveALL_AFTER_ACTION_NONE(void);
	public: void CPC::AsyncSaveALL_AFTER_ACTION_ANYTIME(void);
	public: void CPC::AsyncSaveALL_AFTER_ACTION_XXX(void);
	public: void CPC::ParseDBFmtStoreItemData(const int in_Length, const unsigned char* in_pData);
	public: void CPC::AsyncDBComplete_LoadCart(const int in_SKLevel, const unsigned char* in_pData, const int in_Length);
	public: int CPC::GetStoreItemDBFormat(unsigned char* out_pBuffer, const int in_MaxBytes);
	//public: void CPC::StoreItemReset(void);
	public: void CPC::GetDBInfo(const int in_callfunc, CHARINFO_TO_CHARACTERDB& io_DBInfo);
	public: IVItItem* CPC::SearchItemByUniqueIdentityNum(const enum enumInventoryType in_InventoryType, const __int64 in_UID);
	public: void CPC::HireItemCheckAdd(const enum enumInventoryType in_InventoryType, IVItItem* in_pItem);
	public: void CPC::TransferSKILLtoPARTYmember(CCharacter* const in_TransferCH, const int in_SKID, const int in_SKLevel, const int in_EFST, const int in_EFST_Time, const int in_EFST_Value);
	public: void CPC::MercenaryCall_Create_After(const int in_Job);
	public: void CPC::MercenaryCall_Delete_After(const int in_reason);
	//public: void CPC::SendPVPPoint(void);
	public: int CPC::GetCountOfMyNameItem(int item);
	public: void CPC::SetBanTime(unsigned long time);
	public: unsigned long CPC::GetBanTime(void);
	public: void CPC::Init(CAsyncStream* stream, unsigned long ip);
	public: void CPC::GameGuardInit(void);
	public: int CPC::OnProcess(void);
	public: virtual unsigned long CPC::GetAccountID(void);
	public: const char* CPC::GetAccountName(void);
	//public: int CPC::IsMapType(int);
	public: virtual int CPC::OnMsg(CCharacter* sender, CCharacter* receiver, unsigned long msgID, int par1, int par2, int par3, MSGpar::CVar par4);
	public: virtual int CPC::GetParameterValue(unsigned short id, int& value);
	public: virtual int CPC::UpdateParameterValue(unsigned short id, int value);
	public: virtual void CPC::InsertCommand(COMMAND_QUEUE* command);
	public: virtual void CPC::CheckCommandQueue(void);
	public: virtual void CPC::DisableCommand(unsigned long commandID);
	public: virtual COMMAND_QUEUE* CPC::SearchCommand(unsigned long commandID);
	public: virtual int CPC::IsMyArea(CCharacter* ch, int range);
	//public: void CPC::ProcessRegionSkill(int, short, CCharacter*, int, int);
	public: unsigned short CPC::GetItemCount(unsigned short id);
	public: int CPC::GetJustBodyItemCount(unsigned short id, int& value);
	public: int CPC::GetEquipItemCount(unsigned short id, int& value);
	public: int CPC::IsDisconnectable(void);
	public: void CPC::GetAttackLastTime(LONG& time);
	public: void CPC::SetAttackLastTime(LONG time);
	public: void CPC::GetLastAttackedTime(long& time);
	public: void CPC::SetLastAttackedTime(long time);
	public: int CPC::GetErrorCount(void);
	public: int CPC::AddExWhisperList(const char* name);
	public: int CPC::DeleteExWhisperList(const char* name);
	public: void CPC::SettingWhisperState(int flag);
	public: void CPC::GetWhisperList(int& len, char* buf);
	public: int CPC::SearchWhisperList(const char* name);
	public: void CPC::MulticastDestroyRoom(void);
	public: void CPC::RoomNewEntry(unsigned long roomID);
	public: void CPC::MulticastRoomNewEntry(unsigned long roomID);
	public: int CPC::IsSendable(void);
	public: bool CPC::IsSendable2(const int in_Bytes);
	public: int CPC::IsLockOnMode(void);
	public: void CPC::SetLockOnMode(int flag);
	public: unsigned long CPC::GetTargetAID(void);
	public: void CPC::SetTargetAID(unsigned long AID);
	public: void CPC::CancelLockOnMode(void);
	public: CPacketHandler* CPC::GetPacketHandler(void);
	public: void CPC::Reset(void);
	public: virtual unsigned long CPC::GetState(void);
	public: void CPC::SetState(unsigned long state);
	public: virtual int CPC::GetScale(void);
	public: unsigned long CPC::GetRoomID(void);
	public: void CPC::SetRoomID(unsigned long roomID);
	public: virtual int CPC::IsTarget(CCharacter* ch, unsigned long flag);
	public: int CPC::isNotifyPosition(short xPos, short yPos);
	public: int CPC::isPartyMaster(void);
	public: void CPC::NotifyPositionToParty(short xPos, short yPos);
	public: void CPC::NotifyPositionToGuild(short xPos, short yPos);
	public: void CPC::NotifyHpToParty(void);
	public: void CPC::NotifyHpToParty(const unsigned long in_AID, const short in_HP, const short in_MaxHP);
	public: void CPC::NotifyParameter(unsigned long varID, int par1);
	public: unsigned long CPC::GetCharacterID(void);
	public: void CPC::SetValid(int flag);
	public: int CPC::GetJob(void);
	public: int CPC::GetPureJob(void);
	public: int CPC::GetCategoryFirstJob(void);
	public: int CPC::GetCategorySecondJob(void);
	public: static int CPC::GetCategorySecondJob(const int in_Job);
	public: int CPC::GetCategoryThirdJob(void);
	public: void CPC::ChangeJob(int job);
	public: int CPC::GetSP(void);
	public: void CPC::DrainDamage(int damage);
	public: int CPC::GetNormalAttackPower(CCharacter* other, int position, int type, unsigned short SKID, short skLevel, int property);
	public: short CPC::GetAttPowerOnClient(void);
	//public: short CPC::GetAttMPower(void);
	//public: short CPC::GetRefiningAttPower(int position);
	public: short CPC::GetRefiningAttPowerOnClient(void);
	public: short CPC::GetItemDef(int isServer, int isClient);
	//public: short CPC::GetStatusDef(void);
	//public: short CPC::GetAttSucPercentOnClient(void);
	public: int CPC::GetAvoidableSucPerOnClient(void);
	public: int CPC::GetPlusAvoidableSucPerOnClient(void);
	//public: void CPC::ReqItemIdentify(short index);
	//public: void CPC::ReqItemCompositionList(short cardIndex);
	//public: void CPC::ReqItemComposition(short cardIndex, short equipIndex);
	public: void CPC::ReqItemRepair(const REPAIRITEM_INFO& in_TargetItemInfo);
	public: void CPC::ReqWeaponRefine(short index);
	public: virtual int CPC::IsDamageMotionPossible(void);
	public: virtual int CPC::IsRightProperty(int property);
	public: int CPC::IsMovable(void);
	public: virtual int CPC::IsAvoidable(int race, int _class, int level);
	//public: short CPC::GetAttackCount(bool& isConsumePlusArrow);
	public: BOOL CPC::IsAttackable(unsigned short SKID);
	public: int CPC::IsPickable(void);
	public: int CPC::IsSkillUsable(unsigned short SKID);
	public: int CPC::IsSkillEnable(int SKID, int level, CCharacter* ch);
	public: int CPC::IsSitable(void);
	public: int CPC::IsCritical(CCharacter* other, int plusVal);
	public: int CPC::IsTouchableState(unsigned long NAID);
	public: void CPC::AddTouchNPCList(unsigned long NAID);
	public: short CPC::GetCriticalSuccessValue(void);
	public: int CPC::GetPlusAttRange(void);
	public: void CPC::SetBodyStateTimeInfo(unsigned long firstTime, unsigned long secondTime, int state);
	public: void CPC::SetHealthStateTimeInfo(int firstTime, int secondTime, int state);
	public: void CPC::SetInvincibleTimeInfo(unsigned long time, int skillID);
	public: int CPC::GetInvincibleTimeInfo(int skillID);
	public: int CPC::GetSpeed(void);
	public: int CPC::GetAttackHasteValue1(void);
	public: int CPC::GetAttackHasteValue2(void);
	public: int CPC::GetAttackSlowValue(void);
	public: int CPC::GetMoveHasteValue1(void);
	public: int CPC::GetMoveHasteValue2(void);
	public: int CPC::GetMoveSlowValue(void);
	public: int CPC::GetBodyMaxItemWeight(void);
	public: int CPC::GetCartMaxItemWeight(void);
	public: int CPC::GetBodyMaxItemSize(void);
	public: int CPC::GetCartMaxItemSize(void);
	public: int CPC::GetStoreMaxItemSize(void);
	public: int CPC::GetBodyItemWeight(void);
	public: int CPC::GetExchangeMaxItemSize(void);
	public: int CPC::GetMailMaxItemSize(void);
	public: int CPC::GetMCStoreMaxSize(void);
	public: void CPC::SetChatLog(char* dir, char* fileName);
	public: void CPC::InsertChatLog(char* buf, int len);
	public: int CPC::IsMyPartyMember(unsigned long AID);
	public: int CPC::IsPKModeON(void);
	public: int CPC::IsRightForm(int SKID, int xPos, int yPos, int param);
	public: void CPC::ChangePKMode(bool flag);
	public: void CPC::InformAttFailureForDistance(unsigned long AID, short xPos, short yPos);
	public: void CPC::ResetStatus(void);
	public: void CPC::Act_EFST_KAAHI(void);
	public: int CPC::Act_EFST_DWARNING(CCharacter* tar_ch);
	public: int CPC::Act_EFST_DBLOCK(CCharacter* tar_ch, int isRangeAttack);
	public: int CPC::Act_EFST_KAUPE(void);
	public: void CPC::ReductionPredelay(int& delay);
	public: IVItEquipItem* CPC::GetEquipItem(unsigned long loc);
	public: int CPC::IsFirstJob(void);
	public: int CPC::IsSecondJob(void);
	public: int CPC::IsThirdJob(void);
	public: int CPC::GetHealAmount(CCharacter* target, short healSkillLevel, unsigned short SKID);
	public: short CPC::ModifyDamage(CCharacter* other, int& damage, int isRangeAttack, int attackType, unsigned long& targetAID, unsigned short SKID, short skLevel);
	private: void CPC::ModifyDamage_EFST_DEVOTION(CNpcMercenary* const in_cpMercenary, int& io_damage, unsigned long& io_TargetAID, const int in_AttackType, const int in_isRangeAttack, const unsigned short in_SKID);
	public: int CPC::AttackByAutoSpell(unsigned long targetID);
	public: void CPC::SetSpellCasting(unsigned short SKID, short skLevel);
	public: unsigned short CPC::GetSpellCasting(void);
	public: int CPC::IsUsableCellforWaterSkill(int xPos, int yPos);
	public: void CPC::AddSpeicalZoneList(unsigned long AID);
	public: void CPC::NotifyDevotionList(void);
	public: void CPC::NotifySpiritsInfo(void);
	public: void CPC::NotifyRecoveryValue(int type, int value, int maxValue);
	public: void CPC::NotifyRecoveryValue2(int type, int value, int maxValue);
	public: CNPC* CPC::SummonMobBySkill(int SPRType, int maxHP, int time, int x, int y);
	public: void CPC::UpdateCreatedMobCount(int spriteType, int value);
	public: void CPC::DelSpecialZoneList(void);
	public: void CPC::NotifyUseSkill(unsigned short SKID, unsigned long targetAID, unsigned long srcAID, short level, bool result);
	public: short CPC::GetDexValue(void);
	public: short CPC::GetStrValue(void);
	public: short CPC::GetIntValue(void);
	public: short CPC::GetLukValue(void);
	public: short CPC::GetAgiValue(void);
	public: short CPC::GetVitValue(void);
	public: short CPC::GetDefaultDexValue(void);
	public: short CPC::GetDefaultStrValue(void);
	public: short CPC::GetDefaultIntValue(void);
	public: short CPC::GetDefaultLukValue(void);
	public: short CPC::GetDefaultAgiValue(void);
	public: short CPC::GetDefaultVitValue(void);
	public: short CPC::GetDexPlusValue(void);
	public: short CPC::GetStrPlusValue(void);
	public: short CPC::GetIntPlusValue(void);
	public: short CPC::GetLukPlusValue(void);
	public: short CPC::GetAgiPlusValue(void);
	public: short CPC::GetVitPlusValue(void);
	public: void CPC::SetPlusDexValueByJob(int var);
	public: void CPC::SetPlusStrValueByJob(int var);
	public: void CPC::SetPlusIntValueByJob(int var);
	public: void CPC::SetPlusLukValueByJob(int var);
	public: void CPC::SetPlusAgiValueByJob(int var);
	public: void CPC::SetPlusVitValueByJob(int var);
	public: int CPC::IsMCStoreOpen(void);
	public: int CPC::IsWarpPossible(void);
	public: int CPC::IsValid(void);
	public: int CPC::GetAvoidableSuccessPercent(void);
	public: short CPC::GetStatusAttPower(void);
	public: short CPC::GetItemAttPower(int itemLevel, int type, int position);
	public: short CPC::GetMagicAttMaxPowOnClient(void);
	public: short CPC::GetMagicAttMinPowOnClient(void);
	public: short CPC::GetItemMagicDef(void);
	public: short CPC::GetStatusMagicDef(void);
	public: int CPC::GetMagicAttackFinalDamage(CCharacter* other, int plusATTPowerPercent, int plusATTSuccessPercent, unsigned short SKID);
	public: void CPC::HealStatus(int type);
	public: void CPC::NotifyActionFailure(unsigned long errorCode);
	public: void CPC::NotifyArrowEquiped(unsigned short index);
	public: CITP* CPC::GetITPEquipedWeapon(void);
	public: int CPC::ConsumeItem(unsigned short itmNum, int count, IVItItem* p);
	public: int CPC::ConsumeItemForSkill(unsigned short itmNum, int count);
	public: int CPC::ConsumeJamstone(unsigned short itemNum, int count, int spCost);
	public: int CPC::ConsumeEquipedArrow(short cnt);
	//public: unsigned long CPC::GetCurrentAreaAID(int);
	public: unsigned long CPC::GetGroupIDIFexpShare(void);
	public: int CPC::GetMaxHP(void);
	public: short CPC::GetMaxSP(void);
	public: int CPC::GetAttackMotionTime(void);
	public: int CPC::GetAttackedMotionTime(void);
	public: void CPC::PurchaseItemFromMCStore(unsigned long targetAID, int contentLength, char* buf);
	public: void CPC::SelectDealType(unsigned long NAID, unsigned char type);
	public: void CPC::PurchaseItem(int leftLen, char* buf);
	public: void CPC::SellItem(int leftLen, char* buf);
	public: void CPC::ReqExchangeItem(unsigned long AID);
	public: void CPC::AckReqExchangeItem(unsigned char result);
	public: void CPC::AddExchangeItem(short index, int count);
	public: void CPC::ConcludeExchangeItem(void);
	public: void CPC::CancelExchangeItem(void);
	public: void CPC::Send(int len, char* buf);
	//public: bool CPC::Send2(const unsigned char*, const int);
	public: void CPC::ForceSend(int len, char* buf);
	public: void CPC::OnDispatchClientRequest(Request* request);
	public: void CPC::CloseStore(void);
	public: int CPC::IsStoreOpen(void);
	public: void CPC::ReqMakingItem(MAKABLEITEM_INFO* info);
	public: void CPC::ReqNameByGID(unsigned long GID);
	public: void CPC::AddMoney(int money);
	public: void CPC::DeleteMoney(int money);
	public: int CPC::GetMoney(void);
	public: void CPC::OnReqOpenMCStore(int len, char* buf);
	public: void CPC::OnReqItemListFromMCStore(unsigned long AID);
	public: void CPC::NotifyMCStore(unsigned long AID);
	public: void CPC::Save(Request* request);
	public: void CPC::CancelMCStore(void);
	public: double CPC::GetAttackDistance();
	//public: void CPC::NotifyAttackRange(void);
	public: int CPC::ChkGndSkillDurability(void);
	public: void CPC::SetSPPoint(int sppoint);
	public: void CPC::OnResetStat(void);
	public: void CPC::OnResetSkill(void);
	public: void CPC::InitEnemyInfo(void);
	//public: void CPC::InsertEnemyInfo(ENEMY_INFO* enemyInfo);
	//public: void CPC::UpdateEnemyInfo(void);
	//public: ENEMY_INFO* CPC::SearchEnemyInfo(unsigned long AID);
	//public: void CPC::SetLoadingCompleteTime(unsigned long time);
	//public: unsigned long CPC::GetLoadingCompleteTime(void);
	public: virtual int CPC::IsInitingState(void);
	public: virtual int CPC::IsLucky(void);
	//public: void CPC::SetLastSendTime(unsigned long time request);
	//public: unsigned long CPC::GetLastSendTime(void);
	public: void CPC::PingSend(void);
	//public: void CPC::SetDisconnectStartTime(unsigned long);
	public: unsigned long CPC::GetDisconnectTime(void);
	public: unsigned long CPC::GetIp(void);
	public: CAsyncStream* CPC::GetStream(void);
	public: CharacterInfo* CPC::GetCharacterInfo(void);
	public: CPCBattle* CPC::GetPCBattle(void);
	public: int CPC::GetDesX(void);
	public: int CPC::GetDesY(void);
	public: int CPC::GetPVPWinPoint(void);
	public: void CPC::SetPVPWinPoint(int pvpWinPoint);
	public: void CPC::UpdatePVPWinPoint(int winpvpWinPoint);
	public: void CPC::SetPVPRanking(int ranking);
	public: int CPC::GetPVPRanking(void);
	public: void CPC::SetPVPTotal(int total);
	public: int CPC::GetPVPTotal(void);
	public: void CPC::MulticastEffect(int effectID);
	public: CNPC* CPC::CallMonster(int spriteType, int xPos, int yPos, const char* mapName, const char* npcName, int parentAID, int npcType);
	public: void CPC::CallPet(IVItEquipItem* item);
	public: void CPC::RemovePet(void);
	public: int CPC::GetPetRelationship(void);
	public: void CPC::Gangsi_PetSkill(int spriteType, int relationship);
	public: void CPC::Gangsi_ResetEFST(void);
	public: int CPC::IsPetActive(void);
	public: void CPC::SetParameterValue(unsigned short id, int value);
	public: void CPC::OnEmotion(int type);
	public: void CPC::ReStart(unsigned long NAID);
	public: int CPC::IsGuildMaster(int GDID);
	public: int CPC::GetGDID(void);
	public: int CPC::IsMyAgitCase(void);
	public: int CPC::IsReadyToSave(void);
	public: int CPC::ModifyMoney(int money);
	public: int CPC::IsAlly(unsigned long GDID);
	public: int CPC::IsMyGuildMember(CCharacter* other, int isAllyCHK);
	public: int CPC::GetPartyItemPickupRule(void);
	public: int CPC::GetPartyItemDivisionRule(void);
	public: int CPC::GetDamagedItemNum(void);
	public: void CPC::RepairDamagedItem(void);
	public: void CPC::SetEventNo(int n);
	public: int CPC::GetEventNo(void);
	public: int CPC::IsBadGuy(void);
	public: void CPC::OnEnableItemMove(int event);
	public: void CPC::OnDisableItemMove(void);
	public: int CPC::IsItemMovable(void);
	public: void CPC::ServerMove(void);
	//public: void CPC::TakeOffEquip(unsigned long loc);
	public: void CPC::CheckWeaponState(void);
	public: char* CPC::GetCharacterName(void);
	public: void CPC::OnMakeCouple(unsigned long gid);
	public: void CPC::SetCoupleInfo(void* info, int flag);
	//public: char* CPC::GetPartnerName(void);
	//public: void CPC::SetPartnerInfo(unsigned long gid, char* name);
	//public: char* CPC::CPC::GetGuildName(void);
	//public: int CPC::GetGuildSkillLevel(unsigned short SKID);
	public: void CPC::SetEffectByGospel(CCharacter* ch);
	//public: void CPC::ResetEffectByGospel(int);
	public: virtual void CPC::OnShowEffect(int effect);
	public: virtual void CPC::OnShowEffect3(int effect, int numdata);
	public: virtual int CPC::GetEffectState(void);
	public: virtual void CPC::OnMsgFromItemServer(unsigned long AID, CITZMsg* reqMsg);
	//public: bool CPC::IsMaxZeny(int zeny);
	//public: bool CPC::CheckZeny(int zeny);
	//public: int CPC::IsMaxCount(int item, int count);
	//public: bool CPC::IsMaxWeight(int item, int count);
	//public: bool CPC::GetMEventZenyName(int index, mystd::string& str);
	//public: bool CPC::GetMEventItemName(int index, mystd::string& str);
	//public: bool CPC::GetMEventItemID(int index, int& nItemID);
	//public: bool CPC::GetMEventZeny(int index);
	//public: bool CPC::GetMEventItem(int index, int& itemID, short& itemCount, int event);
	//public: bool CPC::ReqNpcCreateGuild(char* guildname);
	//public: bool CPC::Divorce(void);
	//public: void CPC::NotifyDivorce(unsigned long gid, char* partnerName);
	public: void CPC::DeleteMarriagering(void);
	//public: PARTNER_INFO* CPC::GetMarriedInfo(void);
	//public: int CPC::IsInventoryRemainCount(int item, int count);
	//public: void CPC::SetLastTargetAID(unsigned long aid);
	//public: unsigned long CPC::GetLastTargetAID(void);
	public: void CPC::InitMobileEvent(void);
	//public: int CPC::noExistPoint(void);
	//public: void CPC::SetEventPoint(int Flag);
	//public: void CPC::PCDataMoveToPVP(void);
	//public: int CPC::IsBaby(void);
	public: void CPC::OnMakeFamily(unsigned long gid1, unsigned long gid2);
	public: void CPC::SetFamilyInfo(void* info, int flag);
	//public: FAMILY_INFO* CPC::GetFamilyInfo(void);
	//public: void CPC::SetFamilyExpOption(short value);
	//public: void CPC::OnDeleteFamily(void);
	public: BOOL CPC::MoveForward(unsigned long AID, int& exPos, int& eyPos, int dir, int distance, int flag);
	public: void CPC::SetReadyMotion(int type);
	//public: PCBANG_INFO* CPC::GetPcBangInfo(void);
	//public: int CPC::IsPcBang(void);
	//public: int CPC::GetPcBangPremiumType(void);
	//public: int CPC::GetPVPPoint(void);
	//public: void CPC::SetPVPPoint(int);
	//public: void CPC::UpdatePVPPoint(int point);
	//public: void CPC::SendPVPPoint2(void);
	//public: int CPC::GetWinPoint(void);
	//public: void CPC::AddWinPoint(void);
	//public: void CPC::SetWinPoint(int);
	//public: int CPC::GetLosePoint(void);
	//public: void CPC::AddLosePoint(void);
	//public: void CPC::SetLosePoint(int);
	public: void CPC::SetPlusMakerPower(void);
	//public: void CPC::SetLessEffect(int bValue);
	//public: int CPC::GetLessEffect(void);
	public: int CPC::IsCrazyKiller(void);
	public: int CPC::IsGiveExpToCrazyKiller(void);
	public: int CPC::IsPossibleToGetExp(void);
	public: void CPC::ProcessPKInfo(void);
	public: int CPC::SavePKInfo(void);
	public: int CPC::UpdatePKInfo(CPC* winner, CPC* loser);
	public: void CPC::SetPKInfo(int win, int lose, char* kill_name, char* killed_name, int bLoserCrazyKiller);
	public: void CPC::SetKillerSystem(void);
	public: void CPC::NotifyPKInfo(void);
	public: void CPC::GetPKInfo(void);
	public: void CPC::CheckPalmStrike(void);
	//public: void CPC::NotifyAttackAction(CCharacter* sender, CCharacter* attacker, CCharacter* target, int damage, int bCommand);
	public: void CPC::NotifySkillAction(CCharacter* sender, CCharacter* attacker, CCharacter* target, int damage, short count, short level, unsigned short SKID);
	public: char* CPC::GetRestartMapName(void);
	//public: int CPC::IsSkillEnableMapProperty(int SKID);
	//public: void CPC::OnAckStorePassword(PACKET_CZ_ACK_STORE_PASSWORD& packet);
	//public: void CPC::OnAckCashPassword(PACKET_CZ_ACK_CASH_PASSWORD& packet);
	//public: bool CPC::GetLotto(int index, int& num);
	//public: bool CPC::SetLotto(int n1, int n2, int n3, int n4, int n5, int n6);
	//public: void CPC::InitLotto(void);
	//public: int CPC::PutInventoryBinaryItem(char* ItemBuffer, int ItemLen);
	//public: const char* CPC::GetPartyName(void);
	//public: int CPC::isBodyAddMailItem(unsigned short ITID, unsigned long ItemType, int, EQUIPSLOTINFO slotInfo, __int64 UniqueSerialNum);
	//public: void CPC::SetLastOpenMailName(char* FromName);
	//public: int CPC::GetItemScriptEventNo(void);
	public: void CPC::ResetItemScriptEvent(void);
	public: virtual void CPC::ReduceSPByUseSkill(int sp);
	public: virtual bool CPC::IsExistItem(int itemID, int count, bool isExternalEffect);
	public: virtual bool CPC::ConsumeItemByUseSkill(int itemID, int count, bool isExternalEffect);
	public: virtual short CPC::GetAttackSuccessPercent(CCharacter* other, int isRangeAttack);
	private: int CPC::GetAttackFinalDamage(CCharacter* other, int position, int skillProperty, int plusATTPowerPercent, int plusATTSuccessPercent, int type, int isRangeAttack, unsigned short SKID, short skLevel);
	public: virtual int CPC::GetAttackFinalDamage(ATTACK_INFO* info);
	//public: void CPC::ResetAllEffective(int resetType);
	public: bool CPC::IsDeadState(void);
	//public: void CPC::SendNPCCashPoint(unsigned long npcId, int CashPoint, int FreePoint);
	//public: void CPC::InsertCashPointItem(unsigned short ITID, short Count, const int in_PriceCash, const int, in_ViewCash const int in_BeforCash, const int in_AfterCash, char* Tx_ID);
	//public: void CPC::UnLockCashPoint(void);
	public: void CPC::SendPacketToPartyInMap(int len, char* packet, bool isIncludeSelf);
	public: void CPC::SendPacketToPartyInMapOuterRange(int len, char* packet);
	//public: void CPC::NotifyEquipItemDamaged(unsigned short wearLocation);
	//public: short CPC::GetSkillLevel(unsigned short SKID, int isFixedSkill);
	public: short CPC::GetBodyState(void);
	//public: short CPC::GetExtDodgePercent(void);
	//public: short CPC::GetPerfectExtDodgePercent(void);
	//public: short CPC::GetPlusHitPercent(void);
	//public: void CPC::AsyncDBComplete_LoadQuestEvent(const unsigned char*, const int, const unsigned char*, const int, const unsigned char*, const int, const unsigned char*, const int);
	//public: int CPC::GetPlusPowerOfItem(unsigned long type);
	public: void CPC::SetBattleFieldInfo(char campID, short xPos1, short yPos1, bool isSaveFlag);
	//public: void CPC::UpdateBattleFieldRespawnPoint2(short xPos, short yPos);
	//public: void CPC::MoveToBattleFieldRespawnPoint(short RP_No, unsigned long npcID);
	public: bool CPC::NotifyHPToBattleFieldCamp(unsigned long AID, int hp, int mhp, const char* name);
	public: void CPC::BroadcastHP(unsigned long AID, int hp, int mhp);
	public: void CPC::BroadcastHP(void);
	public: void CPC::ClearDevotionList(void);
	//public: void CPC::OnStopedProgress(void);
	//public: int CPC::MyPartyJobCheck(void);
	//public: void CPC::CheckBlockEquipItem(void);
	public: bool CPC::IsMapPropertyBlockEquipItem(const int in_ITID);
	//public: void CPC::CheckBlockBuff(void);
	//public: int CPC::GetPlusStdPropertyDamage(CCharacter* other, int itemAttPower, int calcDamageType, int position, unsigned short SKID, short skLevel, int property);
	//public: int CPC::GetPlusFinalDamage(CCharacter* other, int damage, unsigned short SKID, short skLevel, int position, bool isCRI, int isRangeAttack);
	//public: int CPC::GetPlusStdPropertyMagicDamage(CCharacter* other, int itemMPower);
	//public: int CPC::GetPlusFinalMagicDamage(CCharacter* other, int damage, unsigned short SKID);
	//public: int CPC::GetMinusStdPropertyDamage(CCharacter* atker, int damage, unsigned short SKID, int, bool isMagicAttack);
	//public: int CPC::GetMinusFinalDamage(CCharacter* atker, int damage, int isRangeAttack);
	private: void CPC::CheckMove(void);
	private: void CPC::CheckStateChange(void);
	private: void CPC::CheckSpecialState(unsigned long tick);
	private: void CPC::CheckMannerPoint(void);
	private: void CPC::CheckGuildPassiveSkill(void);
	private: void CPC::CheckTouchNPCList(void);
	private: int CPC::IsMovableAround(int range);
	private: void CPC::WarpBetweenServer(void);
	private: void CPC::OnCheckPoint(int par1);
	private: void CPC::DispatchCommand(int par);
	//private: void CPC::ResetCommandQueue(void);
	private: void CPC::DisableAllCommand(void);
	private: void CPC::OnExecExchangeItem(int par1);
	private: void CPC::ResetExchangeItemInfo(void);
	private: void CPC::CartOff(void);
	private: void CPC::MultiCastStateInfo(void);
	private: void CPC::SaveWarpInfo(void);
	private: void CPC::NotifyInfoToSection(void);
	private: int CPC::GetPartyInMyMapTotalLevel(void);
	private: int CPC::GetPartyInMyMapTotalNextExp(void);
	private: int CPC::GetPartyMemberCountInMyMap(void);
	private: void CPC::OnAddMemberToGroup(int par1, int par2);
	private: void CPC::OnDeleteMemberFromGroup(int par1, int par2);
	private: void CPC::OnAckMakeGroup(int par1, int par2);
	private: void CPC::OnGroupList(int par1, int par2, int par3);
	private: void CPC::OnAckReqJoinGroup(int par1, int par2);
	private: void CPC::OnReqJoinGroup(int par1, int par2);
	private: void CPC::OnNotifyPositionParty(CCharacter* ch, int par1, int par2, int par3);
	private: void CPC::OnNotifyPositionGuild(CCharacter* ch, int par1, int par2, int par3);
	private: void CPC::OnNotifyHpParty(CCharacter* ch, int par1, int par2, int par3);
	private: void CPC::OnGRIDUpdate(int par1, int par2);
	private: void CPC::OnChatParty(int par1, int par2, int par3);
	private: void CPC::OnDeleteFromGroupLIst(int par1);
	private: void CPC::DeleteCommand(unsigned long commandID);
	private: void CPC::OnAddExp(CCharacter* sender, int exp, int par1);
	private: void CPC::AddExp(CCharacter* sender, int exp);
	private: void CPC::OnAddJobExp(CCharacter* sender, int par1, int par2, int par3);
	private: void CPC::AddJobExp(CCharacter* sender, int exp);
	private: int CPC::IsShareEnable(void);
	private: void CPC::OnShareExp(CCharacter* sender, int par1);
	private: void CPC::OnShareJobExp(CCharacter* sender, int par1);
	private: void CPC::OnAddPartyExp(int par1, int par2, int par3);
	private: void CPC::OnAddPartyJOBExp(int par1, int par2, int par3);
	private: void CPC::OnAddVirtue(int virtue);
	private: void CPC::OnDead(unsigned long enemyAID, int& isRestart);
	private: void CPC::OnNotifyMakableWeaponItemList(void);
	private: void CPC::OnNotifyMakableMetalItemList(void);
	private: void CPC::OnMVPItem(int par1);
	private: void CPC::OnMVPExp(int par1);
	private: void CPC::OnAddSkill(int par1);
	private: void CPC::MultiCastMVP(void);
	private: void CPC::OnSkillLevelUp(int par1);
	private: void CPC::OnHPPlus(int par1, int par2, int par3);
	private: void CPC::OnSPPlus(int par1, int par2, int par3);
	private: void CPC::OnUseSkill(int SKID, int target, int level, int spCost);
	private: void CPC::OnUseGroundSkill(int par1, int par2, int skLevel, int spCost);
	private: void CPC::ActSkillToChar_SpATK(int SKID, int par2, int par3);
	private: void CPC::OPSkillToRangeGuild(int SKID, int target, int par1);
	private: void CPC::OPSkillToGuild(int SKID, int target, int par1);
	private: void CPC::AttSkillToChar22_1(int SKID, int tarAID, int SKInfo);
	private: void CPC::SPAttSkillToChar22_1(int par1, int par2, int par3);
	private: void CPC::SPAttSkillToChar22_2(int SKID, int target, int par1);
	private: void CPC::OperSkillToChar22_1(int SKID, int tarAID, int SKInfo);
	private: int CPC::OperSkillToChar22_1_SA_family(const int in_SKID, const int in_SKLevel, const int in_SPcost, const int in_ConsumeItemID, const int in_Data2, const int in_FailProbabilityFactor, CCharacter* const in_pTargetCh);
	private: void CPC::OperSkillToSelf22_1(int SKID, int tarAID, int SKInfo);
	private: void CPC::OnGroundSkill22_1(int SKID, int tarAID, int SKInfo);
	private: void CPC::OnTouchedSkillObj22_1(CCharacter* ch, MSG_TYPE4_FIVEDWORD* data, int par1);
	private: void CPC::OnTouchedSkillObj22_2(CCharacter* other, MSG_TYPE4_FIVEDWORD* data, int par1);
	//private: int CPC::IsSkillEnable22_1(int skillID, int level, int& failEnum, CCharacter* other);
	//private: int CPC::IsSkillEnable22_2(int skillID, int level, int& failEnum, CCharacter* other);
	//private: int CPC::GetGrandCrossPos(int xPos, int yPos, int range, PosInfo* pos);
	//private: void CPC::SetMagicTargetAID(unsigned long aid);
	//private: unsigned long CPC::GetMagicTargetAID(void);
	private: void CPC::CancelCasting(int flag);
	private: void CPC::OnAutoSpellList(int par1, int par2, int par3);
	private: void CPC::ApplyPlusHpSp(int maxHP, int maxSP, int weightPercent);
	//private: void CPC::OnNotifyMakablePotionItemList(void);
	//private: void CPC::AM_ReqMakingItem(MAKABLEITEM_INFO* info);
	private: void CPC::AM_ReqMakingHomun(void);
	private: void CPC::AttSkillToChar22_2(int SKID, int target, int param);
	private: void CPC::OperSkillToChar22_2(int SKID, int target, int param, MSGpar::CVar in_var);
	private: void CPC::OperSkillToSelf22_2(int SKID, int target, int param);
	private: void CPC::OnGroundSkill22_2(int SKID, int target, int param);
	private: virtual int CPC::SkillAttack(SKILLATTACK_MSG* msg, int plusATTPowerPercent, int plusATTSuccessPercent, const bool in_bSilenceSkill);
	public: virtual short CPC::SplashAttack(int val1, short xPos, short yPos, int type, int range, int rangeIn, unsigned long exceptAID, void* msgDataPtr, int val2, int count);
	private: virtual int CPC::SplashAttack2(int plusATTPower, PosInfo dest, int type, int halfWidth, int height, MSG_TYPE1_TWODWORD* msgData, int count, int plusHitPercent, PosInfo* specialSrc);
	private: void CPC::SplashAttack3(int plusATTPower, PosInfo dest, int type, MSG_TYPE1_TWODWORD* msgData, int range, int count);
	private: void CPC::CollideSplashAttack(int plusATTPower, CCharacter* src, CCharacter* other, int destDir, int type, unsigned short SKID, int count, mystd::map<CCharacter *,CollideInfo>& collidedList);
	private: int CPC::AddRandomAttackPower(int weaponLevel, int refiningLevel);
	private: void CPC::OnTouchedSkillObject(int AID, int par1, int bisSectionMove);
	private: void CPC::OnHealHP(int par1);
	private: void CPC::OnGroundSkill(int SKID, int par2, int par3);
	private: void CPC::OnTeleportCharacter(int par1, int par2, int par3);
	private: void CPC::OnWarpCharacter(int par1, int par2, int par3);
	private: void CPC::OnWarpPositionRemember(int par1, int par2, int par3);
	private: void CPC::OnStarPlaceRemember(int par1, int par2, int par3);
	private: void CPC::OnBlessingFromAcolyte(CCharacter* sender, int par1, int par2, int par3);
	private: void CPC::OnPlusAttRangeOnVulture(int par1, int par2, int par3);
	private: void CPC::OnIncCarry(int amount);
	private: void CPC::OnIncCarry2(int par1, int par2, int par3);
	private: void CPC::OnSgDevil(int par1, int par2, int par3);
	private: void CPC::OnSgFriend(int par1, int par2, int par3);
	private: void CPC::OnVending(int par1, int par2, int par3);
	private: void CPC::OnResurrection(int par1, const int in_CauseSKID);
	private: void CPC::OnMoveStop(int xPos, int yPos, int par3);
	private: int CPC::IsAttackableRange(int xPos, int yPos);
	//private: int CPC::IsSkillAttackRange(int SKID, PosInfo pos);
	private: void CPC::OnGroupInfoChange(int par1);
	private: void CPC::ReqGroupInfoChangeV2(int par1, int par2);
	private: void CPC::OnDlgWrite(int par1);
	private: void CPC::OnDlgWriteStr(int npcID);
	private: void CPC::OnHealByPercent(int par1, int par2);
	private: void CPC::OnCompass(int NAID, int type, int msg);
	private: void CPC::OnShowImage(int type, int imageName);
	private: void CPC::OnChangePalette(int where, int palattetype);
	private: void CPC::OnChangeAGI(int par1, int par2, int par3);
	private: void CPC::OnChangeDEX(int par1, int par2, int par3);
	private: void CPC::OnChangeINT(int par1, int par2, int par3);
	private: void CPC::OnChangeLUK(int par1, int par2, int par3);
	private: void CPC::OnChangeSTR(int par1, int par2, int par3);
	private: void CPC::OnChangeVIT(int par1, int par2, int par3);
	private: void CPC::OnCureFromAcolyte(void);
	private: void CPC::OnNotifyItemInfoInMCStore(int par1);
	private: IVItItem* CPC::OnAddItem(int ID, int type, int par, int Hour, bool isUniqueIdentityNumV2);
	private: void CPC::OnAddReservedEmpeliumItem(void);
	private: void CPC::OnNotifyMannerPointGiven(CCharacter* sender, int type, int point);
	private: void CPC::OnItemIdentifySkill(int par1, int par2, int par3);
	private: void CPC::OnSuccessOfItemRef(int loc);
	private: void CPC::OnFailureOfItemRef(int loc);
	private: void CPC::OnStandardStatChange(unsigned long var);
	private: void CPC::OnPVPPlusPoint(int point);
	private: void CPC::OnNotifyRankingInfo(int ranking, int total);
	private: short CPC::GetCurrentState(void);
	private: void CPC::SetBodyState(short state);
	private: void CPC::SetHealthState(short state);
	private: void CPC::SetCurrentState(short state);
	private: void CPC::AddGroupMember(unsigned long AID);
	private: void CPC::DeleteGroupMember(unsigned long AID);
	public: void CPC::ResetGroupMember(void);
	public: void CPC::DetectHidingCharacter(int range, SKILLATTACK_MSG* msg, int plusAttPower, int deltaX, int deltaY);
	public: void CPC::KnuckBack(CCharacter* ch, short dist, int time, short who);
	private: void CPC::NotifyGroundSkillUsing(unsigned short SKID, short level, short xPos, short yPos, unsigned long startTime);
	//private: int CPC::GetFireWallNeighborCells(short srcX, short srcY, int desX, int desY, int* result);
	//private: void CPC::GetIceWallNeighborCells(short srcX, short srcY, int desX, int desY, int size, PosInfo* result);
	private: void CPC::GetPushedPosition2(int xPos, int yPos, int destDir, int distance, PosInfo& result);
	//private: int CPC::GetSplashCells(PosInfo src, PosInfo dest, int halfWidth, int height, PosInfo* result);
	//private: void CPC::GetSplashCells2(PosInfo src, PosInfo dest, int height, PosInfo* result);
	private: virtual int CPC::SetHandicapState(int state, CCharacter* other, int percent, int preDelayTime, int delayTime, int isSpell, int isFixedDelayTime);
	public: virtual int CPC::GetModifiedTargetItemDEF(CCharacter* target);
	public: virtual int CPC::GetModifiedTargetItemMDEF(CCharacter* target);
	public: virtual int CPC::SetEffective(int index, int time, int val1, int val2, int val3, int isSendClient);
	public: virtual void CPC::ResetEffective(int index, int val);
	public: virtual bool CPC::IsGroundEffective(int index, int& SKID, bool& isPlaySolo);
	public: virtual void CPC::ProcessGroundEffective(int index, int SKID, bool isPlaySolo);
	public: virtual void CPC::SetOnShowEFST(int value);
	public: virtual void CPC::SetOffShowEFST(int value);
	public: virtual void CPC::OnChangeStatusAmount(int SKID, unsigned short type, unsigned long time, int amount);
	public: virtual void CPC::NotifyStatusAmount(unsigned short type, int amount);
	public: virtual char CPC::GetCampID(void);
	public: virtual void CPC::SetCampID(char campID);
	public: virtual const char* CPC::GetNamePtr(void);
	public: virtual short CPC::GetHealthState(void);
	public: virtual void CPC::ResetHealthState(short state);
	public: virtual void CPC::SetEffectStateTimeInfo(unsigned long time, int state);
	public: virtual void CPC::ResetEffectState(int state);
	public: virtual void CPC::SetEffectState(int state);
	public: virtual int CPC::GetBodyItemCount(unsigned short id, int& value);
	public: virtual int CPC::UpdateBodyItemCount(unsigned short id, int count, bool isidentified);
	public: virtual int CPC::UpdateBodyItemCountByNPC(unsigned short id, int count, bool isidentified);
	public: virtual void CPC::SkillUseAck(unsigned short SKID, unsigned short NUM, bool result, unsigned char cause);
	public: virtual void CPC::ModifyAttackPowerByEffective(CCharacter* ch, int attackProperty, int& damage);
	public: virtual void CPC::ApplyExtraDEF(int& def, CCharacter* in_cpAtkerCH);
	public: virtual void CPC::ApplyExtraMDEF(int& def);
	//private: void CPC::NotifyItemThrowed(short index, short count);
	private: void CPC::InitTime(void);
	private: int CPC::GetLockCounter(void);
	private: void CPC::ModifyLockCounter(int count);
	//private: void CPC::OnSummon(int type);
	private: void CPC::OnDamagedWeapon(void);
	private: void CPC::OnDamagedArmor(void);
	private: void CPC::OnDamageEquipment(int type);
	//private: void CPC::UpdateAttackMotionTime(void);
	//private: void CPC::UpdateAvoidableSucPerOnClient(void);
	//private: void CPC::UpdateStatusAttPower(void);
	//private: void CPC::UpdateAttSucPercentOnClient(void);
	//private: void CPC::StartCapture(int item);
	//private: void CPC::TryCaptureMonster(unsigned long targetAID);
	//private: void CPC::CommandPet(char cSub);
	//private: void CPC::RenamePet(char* name);
	//private: void CPC::SelectPetEgg(int index);
	//private: void CPC::GetPetEggInfo(int index);
	private: void CPC::SendMsgToPet(int petMsg, int par1);
	//private: void CPC::OnFeedPet(void);
	//private: void CPC::OnUseIncubator(void);
	private: int CPC::ConvertPetToPetEgg(void);
	private: CNpcPet* CPC::GetMyPetObject(void);
	private: int CPC::OnUsePetAcc(unsigned short item);
	//private: void CPC::PetAct(int data);
	private: int CPC::IsPetWearable(unsigned short item);
	//private: int CPC::IsEnableCart(void);
	//private: int CPC::IsSucessCooking(short level, short stuffNum);
	private: int CPC::CheckGameGuard(void);
	//private: void CPC::SetGameGuard(_GG_AUTH_DATA* auth);
	private: void CPC::OnCM_NOTIFY_STOREDITEM(void);
	private: void CPC::OnCM_NOTIFY_CASHITEM(void);
	//private: bool CPC::IsCaptureSuccess(CNPC* pTarget, int item);
	//private: bool CPC::IsCapturable(CNPC* pTarget);
	//private: void CPC::OnCooking(short par);
	//private: void CPC::OnChangedHP(void);
	//private: void CPC::OnChangedSP(void);
	//private: void CPC::MoveItem(unsigned char type, short index, int count);
	private: void CPC::LoadEffectiveInfo(const unsigned char* in_pData, const int in_Length);
	private: int CPC::GetEffectiveDBFmt(unsigned char* out_Data, const int in_MaxBytes);
	//private: void CPC::AsyncSaveEffectiveInfo(void);
	//private: int CPC::AddMailAndAuctionItem(int Type, short index, int count);
	private: void CPC::OnConSumeSpecialItem(int ITID);
	private: void CPC::OnHuntingList(int mob);
	private: void CPC::LoadHuntingList(void);
	private: void CPC::LoadTimeList(void);
	//private: void CPC::SaveHuntingList(void);
	//private: void CPC::SaveTimeList(void);
	//private: int CPC::GetPetEgg(int mobType);
	//private: void CPC::GetCashPoint(unsigned long npcId);
	//private: void CPC::PCBuyCashPointItem(unsigned short ITID, short Count, int FreeCash, int shopType);
	//private: void CPC::SimpleCashShop(void);
	//private: void CPC::SendSimpleCashShopItemList(int cashPoint, int freePoint);
	//public: void CPC::SetSimpleCashShopOpen(bool state);
	//public: bool CPC::GetSimpleCashShopOpen(void);
	//private: void CPC::OnAddParamTimeByFood(unsigned short paramType, unsigned long time, int amount, int isCashItem);
	private: bool CPC::IsEnableSetEFSTFood(unsigned short efstType, int val);
	//private: int CPC::GetCashItemPlusExp(unsigned short type, int prevExp);
	//private: void CPC::ModifyExpByDeathPenalty(int& exp, int& jobexp);
	//private: void CPC::OnPartyCall(void);
	private: void CPC::SendZCMsg(unsigned short msg);
	//private: void CPC::OnStandingResurrection(void);
	//private: void CPC::OnUseBossPerception(unsigned long time);
	private: void CPC::OnNotifyBossInfo(char* packet);
	//private: void CPC::OnOpenDialogWriteStr(unsigned long npcID);
	//private: void CPC::ApplyHealSkillPercent(int& value);
	//private: bool CPC::IsAttackHit(CCharacter* other, int isRangeAttack, int plusATTSuccessPercent);
	//private: bool CPC::IsMagicAttackHit(CCharacter*);
	//private: void CPC::GetPlusATTPowerPercent(int& plusATTPowerPercent);
	//private: void CPC::GetPlusATTSuccessPercent(int& plusATTSuccessPercent);
	//private: int CPC::GetPlusPropertyDamageWithBlackSmithWeapon(CCharacter* other, int prevDamage, int type, int skillProperty, int position);
	//private: void CPC::GetPlusMagicPowerPercent(int& plusMagicPowerPercent);
	//private: void CPC::ResetDeadCount(void);
	//private: void CPC::AddDeadCount(void);
	//private: short CPC::GetDeadCount(void);
	//private: bool CPC::AutoGoToTown(void);
	//private: int CPC::GetIgnoreDEFDamage(void);
	//private: bool CPC::ReduceSPByNormalAttack(int position);
	//private: int CPC::GetRandomRefinePower(int position);
	//private: void CPC::ModifyItemPowerByScale(int& damage, int position, int targetScale);
	//private: int CPC::GetStatusPowerModifyValue(CCharacter* other);
	//public: int CPC::GetMagicAttackModifiedPower(CCharacter*, int, int, unsigned short, int);
	//public: void CPC::ChangePropertyTolerance(int property, int percent, int attackType);
	//public: void CPC::ChangeRaceTolerance(int raceType, int percent);
	public: void CPC::OnQuestHuntingList(int mob);
	public: virtual void CPC::SetSkillSinglePostDelay(unsigned short SKID, unsigned long delaytime);
	//public: void CPC::UpdateRaceInfo(int funcType, int raceType, int par1, int par2);
	//public: void CPC::SendZCWhisperFromServer(const char* str, ...);
	//public: void CPC::OnNotifyMakableRuneItemList(int rawID);
	//public: void CPC::RK_ReqMakingItem(MAKABLEITEM_INFO* info);
	//public: int CPC::IsSuccessRuneUse(int runeID);
	//public: void CPC::OnNotifyMakableNewPoisonList(void);
	//public: void CPC::GC_ReqMakingItem(const MAKABLEITEM_INFO& in_MakableItemInfo);
	//public: void CPC::NC_MAGICDECOY_operate(const int);
	//public: int CPC::GetEnableMaxNumSpirits(int);
	//public: bool CPC::DetectAndReleaseHidingState(CCharacter* target);
	//public: int CPC::GetEnableDelayTimeForComboAttack(void);
	//public: int CPC::GetComboAttackPostDelayTime(int);
	//public: int CPC::GetPlusRefinerySuccessPercent(void);
	//public: int CPC::DownGradeOfItemRef(int part, int down);
	//public: int CPC::SuccessRandomRefItem(int part, int up);
	//public: void CPC::SetLastCardIndex(short index);
	//public: short CPC::GetLastCardIndex(void);
	//public: void CPC::SetMyPetID(int ID);
	//public: int CPC::GetMyPetID(void);
	public: int CPC::IsFirstJobORLowLevel(void);
	public: void CPC::SetMapLoadingFlag(int bFlag);
	//public: void CPC::SetAuctionOpenFlag(int);
	//public: void CPC::SetMailOpenFlag(int);
	public: int CPC::isAuctionOpen(void);
	public: int CPC::isMailOpen(void);
	public: void CPC::AuctionOpen(void);
	public: void CPC::MailOpen(void);
	//public: int CPC::isChangeShortCutKey(void);
	public: void CPC::OnShortcutKey_Change(int Index, ShortCutKey SCKey);
	public: void CPC::SendShortCutKeyInfo(void);
	//public: void CPC::SaveShortCut(void);
	public: void CPC::ScriptTimeClear(void);
	public: void CPC::SetScriptTime(int key);
	public: int CPC::GetScriptTime(int key);

	public: bool CPC::IsFamilySharePossible(void);

private:
	static hook_method<int (CPC::*)(int position, int isArrowProperty)> CPC::_GetWeaponProperty;
	static hook_method<int (CPC::*)(void)> CPC::_IsSiegeMode;
	static hook_method<void (CPC::*)(void)> CPC::_ForceMapMove_To_RestartMap;
	static hook_method<bool (CPC::*)(void)> CPC::_IsOpenEquipmentWin;
	static hook_method<void (CPC::*)(const enum CPC::enumDisconnectStep in_Step)> CPC::_SetDisconnectStep;
	static hook_method<const enum CPC::enumDisconnectStep (CPC::*)(void)> CPC::_GetDisconnectStep;
	static hook_method<CPCClientUpdater* (CPC::*)(void)> CPC::_GetClientUpdaterPtr;
	static hook_method<void (CPC::*)(void)> CPC::_AsyncSaveBodyItem;
	static hook_method<void (CPC::*)(void)> CPC::_AsyncSaveStore;
	static hook_method<void (CPC::*)(void)> CPC::_AsyncSaveCart;
	static hook_method<void (CPC::*)(const int in_callfunc)> CPC::_AsyncSaveCharacterInfo;
	static hook_method<void (CPC::*)(void)> CPC::_AsyncLoadStore;
	static hook_method<void (CPC::*)(CCharacter* const in_pSender)> CPC::_AsyncLoadCart;
	static hook_method<void (CPC::*)(void)> CPC::_AsyncSaveALL_AFTER_ACTION_NONE;
	static hook_method<void (CPC::*)(void)> CPC::_AsyncSaveALL_AFTER_ACTION_ANYTIME;
	static hook_method<void (CPC::*)(void)> CPC::_AsyncSaveALL_AFTER_ACTION_XXX;
	static hook_method<void (CPC::*)(const int in_Length, const unsigned char* in_pData)> CPC::_ParseDBFmtStoreItemData;
	static hook_method<void (CPC::*)(const int in_SKLevel, const unsigned char* in_pData, const int in_Length)> CPC::_AsyncDBComplete_LoadCart;
	static hook_method<int (CPC::*)(unsigned char* out_pBuffer, const int in_MaxBytes)> CPC::_GetStoreItemDBFormat;
	static hook_method<void (CPC::*)(const int in_callfunc, CHARINFO_TO_CHARACTERDB& io_DBInfo)> CPC::_GetDBInfo;
	static hook_method<IVItItem* (CPC::*)(const enum enumInventoryType in_InventoryType, const __int64 in_UID)> CPC::_SearchItemByUniqueIdentityNum;
	static hook_method<void (CPC::*)(const enum enumInventoryType in_InventoryType, IVItItem* in_pItem)> CPC::_HireItemCheckAdd;
	static hook_method<void (CPC::*)(CCharacter* const in_TransferCH, const int in_SKID, const int in_SKLevel, const int in_EFST, const int in_EFST_Time, const int in_EFST_Value)> CPC::_TransferSKILLtoPARTYmember;
	static hook_method<void (CPC::*)(const int in_Job)> CPC::_MercenaryCall_Create_After;
	static hook_method<void (CPC::*)(const int in_reason)> CPC::_MercenaryCall_Delete_After;
	static hook_method<int (CPC::*)(int item)> CPC::_GetCountOfMyNameItem;
	static hook_method<void (CPC::*)(unsigned long time)> CPC::_SetBanTime;
	static hook_method<unsigned long (CPC::*)(void)> CPC::_GetBanTime;
	static hook_method<void (CPC::*)(CAsyncStream* stream, unsigned long ip)> CPC::_Init;
	static hook_method<void (CPC::*)(void)> CPC::_GameGuardInit;
	static hook_method<int (CPC::*)(void)> CPC::_OnProcess;
	static hook_method<unsigned long (CPC::*)(void)> CPC::_GetAccountID;
	static hook_method<const char* (CPC::*)(void)> CPC::_GetAccountName;
	static hook_method<int (CPC::*)(CCharacter* sender, CCharacter* receiver, unsigned long msgID, int par1, int par2, int par3, MSGpar::CVar par4)> CPC::_OnMsg;
	static hook_method<int (CPC::*)(unsigned short id, int& value)> CPC::_GetParameterValue;
	static hook_method<int (CPC::*)(unsigned short id, int value)> CPC::_UpdateParameterValue;
	static hook_method<void (CPC::*)(COMMAND_QUEUE* command)> CPC::_InsertCommand;
	static hook_method<void (CPC::*)(void)> CPC::_CheckCommandQueue;
	static hook_method<void (CPC::*)(unsigned long commandID)> CPC::_DisableCommand;
	static hook_method<COMMAND_QUEUE* (CPC::*)(unsigned long commandID)> CPC::_SearchCommand;
	static hook_method<int (CPC::*)(CCharacter* ch, int range)> CPC::_IsMyArea;
	static hook_method<unsigned short (CPC::*)(unsigned short id)> CPC::_GetItemCount;
	static hook_method<int (CPC::*)(unsigned short id, int& value)> CPC::_GetJustBodyItemCount;
	static hook_method<int (CPC::*)(unsigned short id, int& value)> CPC::_GetEquipItemCount;
	static hook_method<int (CPC::*)(void)> CPC::_IsDisconnectable;
	static hook_method<void (CPC::*)(LONG& time)> CPC::_GetAttackLastTime;
	static hook_method<void (CPC::*)(LONG time)> CPC::_SetAttackLastTime;
	static hook_method<void (CPC::*)(long& time)> CPC::_GetLastAttackedTime;
	static hook_method<void (CPC::*)(long time)> CPC::_SetLastAttackedTime;
	static hook_method<int (CPC::*)(void)> CPC::_GetErrorCount;
	static hook_method<int (CPC::*)(const char* name)> CPC::_AddExWhisperList;
	static hook_method<int (CPC::*)(const char* name)> CPC::_DeleteExWhisperList;
	static hook_method<void (CPC::*)(int flag)> CPC::_SettingWhisperState;
	static hook_method<void (CPC::*)(int& len, char* buf)> CPC::_GetWhisperList;
	static hook_method<int (CPC::*)(const char* name)> CPC::_SearchWhisperList;
	static hook_method<void (CPC::*)(void)> CPC::_MulticastDestroyRoom;
	static hook_method<void (CPC::*)(unsigned long roomID)> CPC::_RoomNewEntry;
	static hook_method<void (CPC::*)(unsigned long roomID)> CPC::_MulticastRoomNewEntry;
	static hook_method<int (CPC::*)(void)> CPC::_IsSendable;
	static hook_method<bool (CPC::*)(const int in_Bytes)> CPC::_IsSendable2;
	static hook_method<int (CPC::*)(void)> CPC::_IsLockOnMode;
	static hook_method<void (CPC::*)(int flag)> CPC::_SetLockOnMode;
	static hook_method<unsigned long (CPC::*)(void)> CPC::_GetTargetAID;
	static hook_method<void (CPC::*)(unsigned long AID)> CPC::_SetTargetAID;
	static hook_method<void (CPC::*)(void)> CPC::_CancelLockOnMode;
	static hook_method<CPacketHandler* (CPC::*)(void)> CPC::_GetPacketHandler;
	static hook_method<void (CPC::*)(void)> CPC::_Reset;
	static hook_method<unsigned long (CPC::*)(void)> CPC::_GetState;
	static hook_method<void (CPC::*)(unsigned long state)> CPC::_SetState;
	static hook_method<int (CPC::*)(void)> CPC::_GetScale;
	static hook_method<unsigned long (CPC::*)(void)> CPC::_GetRoomID;
	static hook_method<void (CPC::*)(unsigned long roomID)> CPC::_SetRoomID;
	static hook_method<int (CPC::*)(CCharacter* ch, unsigned long flag)> CPC::_IsTarget;
	static hook_method<int (CPC::*)(short xPos, short yPos)> CPC::_isNotifyPosition;
	static hook_method<int (CPC::*)(void)> CPC::_isPartyMaster;
	static hook_method<void (CPC::*)(short xPos, short yPos)> CPC::_NotifyPositionToParty;
	static hook_method<void (CPC::*)(short xPos, short yPos)> CPC::_NotifyPositionToGuild;
	static hook_method<void (CPC::*)(void)> CPC::_NotifyHpToParty;
	static hook_method<void (CPC::*)(const unsigned long in_AID, const short in_HP, const short in_MaxHP)> CPC::_NotifyHpToParty2;
	static hook_method<void (CPC::*)(unsigned long varID, int par1)> CPC::_NotifyParameter;
	static hook_method<unsigned long (CPC::*)(void)> CPC::_GetCharacterID;
	static hook_method<void (CPC::*)(int flag)> CPC::_SetValid;
	static hook_method<int (CPC::*)(void)> CPC::_GetJob;
	static hook_method<int (CPC::*)(void)> CPC::_GetPureJob;
	static hook_method<int (CPC::*)(void)> CPC::_GetCategoryFirstJob;
	static hook_method<int (CPC::*)(void)> CPC::_GetCategorySecondJob;
	static hook_method<static int (__cdecl *)(const int in_Job)> CPC::_GetCategorySecondJob2;
	static hook_method<int (CPC::*)(void)> CPC::_GetCategoryThirdJob;
	static hook_method<void (CPC::*)(int job)> CPC::_ChangeJob;
	static hook_method<int (CPC::*)(void)> CPC::_GetSP;
	static hook_method<void (CPC::*)(int damage)> CPC::_DrainDamage;
	static hook_method<int (CPC::*)(CCharacter* other, int position, int type, unsigned short SKID, short skLevel, int property)> CPC::_GetNormalAttackPower;
	static hook_method<short (CPC::*)(void)> CPC::_GetAttPowerOnClient;
	static hook_method<short (CPC::*)(void)> CPC::_GetRefiningAttPowerOnClient;
	static hook_method<short (CPC::*)(int isServer, int isClient)> CPC::_GetItemDef;
	static hook_method<int (CPC::*)(void)> CPC::_GetAvoidableSucPerOnClient;
	static hook_method<int (CPC::*)(void)> CPC::_GetPlusAvoidableSucPerOnClient;
	static hook_method<void (CPC::*)(const REPAIRITEM_INFO& in_TargetItemInfo)> CPC::_ReqItemRepair;
	static hook_method<void (CPC::*)(short index)> CPC::_ReqWeaponRefine;
	static hook_method<int (CPC::*)(void)> CPC::_IsDamageMotionPossible;
	static hook_method<int (CPC::*)(int property)> CPC::_IsRightProperty;
	static hook_method<int (CPC::*)(void)> CPC::_IsMovable;
	static hook_method<int (CPC::*)(int race, int _class, int level)> CPC::_IsAvoidable;
	static hook_method<int (CPC::*)(void)> CPC::_IsPickable;
	static hook_method<int (CPC::*)(unsigned short SKID)> CPC::_IsSkillUsable;
	static hook_method<int (CPC::*)(int SKID, int level, CCharacter* ch)> CPC::_IsSkillEnable;
	static hook_method<int (CPC::*)(void)> CPC::_IsSitable;
	static hook_method<int (CPC::*)(CCharacter* other, int plusVal)> CPC::_IsCritical;
	static hook_method<int (CPC::*)(unsigned long NAID)> CPC::_IsTouchableState;
	static hook_method<void (CPC::*)(unsigned long NAID)> CPC::_AddTouchNPCList;
	static hook_method<short (CPC::*)(void)> CPC::_GetCriticalSuccessValue;
	static hook_method<int (CPC::*)(void)> CPC::_GetPlusAttRange;
	static hook_method<void (CPC::*)(unsigned long firstTime, unsigned long secondTime, int state)> CPC::_SetBodyStateTimeInfo;
	static hook_method<void (CPC::*)(int firstTime, int secondTime, int state)> CPC::_SetHealthStateTimeInfo;
	static hook_method<void (CPC::*)(unsigned long time, int skillID)> CPC::_SetInvincibleTimeInfo;
	static hook_method<int (CPC::*)(int skillID)> CPC::_GetInvincibleTimeInfo;
	static hook_method<int (CPC::*)(void)> CPC::_GetSpeed;
	static hook_method<int (CPC::*)(void)> CPC::_GetAttackHasteValue1;
	static hook_method<int (CPC::*)(void)> CPC::_GetAttackHasteValue2;
	static hook_method<int (CPC::*)(void)> CPC::_GetAttackSlowValue;
	static hook_method<int (CPC::*)(void)> CPC::_GetMoveHasteValue1;
	static hook_method<int (CPC::*)(void)> CPC::_GetMoveHasteValue2;
	static hook_method<int (CPC::*)(void)> CPC::_GetMoveSlowValue;
	static hook_method<int (CPC::*)(void)> CPC::_GetBodyMaxItemWeight;
	static hook_method<int (CPC::*)(void)> CPC::_GetCartMaxItemWeight;
	static hook_method<int (CPC::*)(void)> CPC::_GetBodyMaxItemSize;
	static hook_method<int (CPC::*)(void)> CPC::_GetCartMaxItemSize;
	static hook_method<int (CPC::*)(void)> CPC::_GetStoreMaxItemSize;
	static hook_method<int (CPC::*)(void)> CPC::_GetBodyItemWeight;
	static hook_method<int (CPC::*)(void)> CPC::_GetExchangeMaxItemSize;
	static hook_method<int (CPC::*)(void)> CPC::_GetMailMaxItemSize;
	static hook_method<int (CPC::*)(void)> CPC::_GetMCStoreMaxSize;
	static hook_method<void (CPC::*)(char* dir, char* fileName)> CPC::_SetChatLog;
	static hook_method<void (CPC::*)(char* buf, int len)> CPC::_InsertChatLog;
	static hook_method<int (CPC::*)(unsigned long AID)> CPC::_IsMyPartyMember;
	static hook_method<int (CPC::*)(void)> CPC::_IsPKModeON;
	static hook_method<int (CPC::*)(int SKID, int xPos, int yPos, int param)> CPC::_IsRightForm;
	static hook_method<void (CPC::*)(bool flag)> CPC::_ChangePKMode;
	static hook_method<void (CPC::*)(unsigned long AID, short xPos, short yPos)> CPC::_InformAttFailureForDistance;
	static hook_method<void (CPC::*)(void)> CPC::_ResetStatus;
	static hook_method<void (CPC::*)(void)> CPC::_Act_EFST_KAAHI;
	static hook_method<int (CPC::*)(CCharacter* tar_ch)> CPC::_Act_EFST_DWARNING;
	static hook_method<int (CPC::*)(CCharacter* tar_ch, int isRangeAttack)> CPC::_Act_EFST_DBLOCK;
	static hook_method<int (CPC::*)(void)> CPC::_Act_EFST_KAUPE;
	static hook_method<void (CPC::*)(int& delay)> CPC::_ReductionPredelay;
	static hook_method<IVItEquipItem* (CPC::*)(unsigned long loc)> CPC::_GetEquipItem;
	static hook_method<int (CPC::*)(void)> CPC::_IsFirstJob;
	static hook_method<int (CPC::*)(void)> CPC::_IsSecondJob;
	static hook_method<int (CPC::*)(void)> CPC::_IsThirdJob;
	static hook_method<int (CPC::*)(CCharacter* target, short healSkillLevel, unsigned short SKID)> CPC::_GetHealAmount;
	static hook_method<short (CPC::*)(CCharacter* other, int& damage, int isRangeAttack, int attackType, unsigned long& targetAID, unsigned short SKID, short skLevel)> CPC::_ModifyDamage;
	static hook_method<void (CPC::*)(CNpcMercenary* const in_cpMercenary, int& io_damage, unsigned long& io_TargetAID, const int in_AttackType, const int in_isRangeAttack, const unsigned short in_SKID)> CPC::_ModifyDamage_EFST_DEVOTION;
	static hook_method<int (CPC::*)(unsigned long targetID)> CPC::_AttackByAutoSpell;
	static hook_method<void (CPC::*)(unsigned short SKID, short skLevel)> CPC::_SetSpellCasting;
	static hook_method<unsigned short (CPC::*)(void)> CPC::_GetSpellCasting;
	static hook_method<int (CPC::*)(int xPos, int yPos)> CPC::_IsUsableCellforWaterSkill;
	static hook_method<void (CPC::*)(unsigned long AID)> CPC::_AddSpeicalZoneList;
	static hook_method<void (CPC::*)(void)> CPC::_NotifyDevotionList;
	static hook_method<void (CPC::*)(void)> CPC::_NotifySpiritsInfo;
	static hook_method<void (CPC::*)(int type, int value, int maxValue)> CPC::_NotifyRecoveryValue;
	static hook_method<void (CPC::*)(int type, int value, int maxValue)> CPC::_NotifyRecoveryValue2;
	static hook_method<CNPC* (CPC::*)(int SPRType, int maxHP, int time, int x, int y)> CPC::_SummonMobBySkill;
	static hook_method<void (CPC::*)(int spriteType, int value)> CPC::_UpdateCreatedMobCount;
	static hook_method<void (CPC::*)(void)> CPC::_DelSpecialZoneList;
	static hook_method<void (CPC::*)(unsigned short SKID, unsigned long targetAID, unsigned long srcAID, short level, bool result)> CPC::_NotifyUseSkill;
	static hook_method<short (CPC::*)(void)> CPC::_GetDexValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetStrValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetIntValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetLukValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetAgiValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetVitValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetDefaultDexValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetDefaultStrValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetDefaultIntValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetDefaultLukValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetDefaultAgiValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetDefaultVitValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetDexPlusValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetStrPlusValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetIntPlusValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetLukPlusValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetAgiPlusValue;
	static hook_method<short (CPC::*)(void)> CPC::_GetVitPlusValue;
	static hook_method<void (CPC::*)(int var)> CPC::_SetPlusDexValueByJob;
	static hook_method<void (CPC::*)(int var)> CPC::_SetPlusStrValueByJob;
	static hook_method<void (CPC::*)(int var)> CPC::_SetPlusIntValueByJob;
	static hook_method<void (CPC::*)(int var)> CPC::_SetPlusLukValueByJob;
	static hook_method<void (CPC::*)(int var)> CPC::_SetPlusAgiValueByJob;
	static hook_method<void (CPC::*)(int var)> CPC::_SetPlusVitValueByJob;
	static hook_method<int (CPC::*)(void)> CPC::_IsMCStoreOpen;
	static hook_method<int (CPC::*)(void)> CPC::_IsWarpPossible;
	static hook_method<int (CPC::*)(void)> CPC::_IsValid;
	static hook_method<int (CPC::*)(void)> CPC::_GetAvoidableSuccessPercent;
	static hook_method<short (CPC::*)(void)> CPC::_GetStatusAttPower;
	static hook_method<short (CPC::*)(int itemLevel, int type, int position)> CPC::_GetItemAttPower;
	static hook_method<short (CPC::*)(void)> CPC::_GetMagicAttMaxPowOnClient;
	static hook_method<short (CPC::*)(void)> CPC::_GetMagicAttMinPowOnClient;
	static hook_method<short (CPC::*)(void)> CPC::_GetItemMagicDef;
	static hook_method<short (CPC::*)(void)> CPC::_GetStatusMagicDef;
	static hook_method<int (CPC::*)(CCharacter* other, int plusATTPowerPercent, int plusATTSuccessPercent, unsigned short SKID)> CPC::_GetMagicAttackFinalDamage;
	static hook_method<void (CPC::*)(int type)> CPC::_HealStatus;
	static hook_method<CITP* (CPC::*)(void)> CPC::_GetITPEquipedWeapon;
	static hook_method<void (CPC::*)(unsigned long errorCode)> CPC::_NotifyActionFailure;
	static hook_method<void (CPC::*)(unsigned short index)> CPC::_NotifyArrowEquiped;
	static hook_method<int (CPC::*)(unsigned short itmNum, int count, IVItItem* p)> CPC::_ConsumeItem;
	static hook_method<int (CPC::*)(unsigned short itmNum, int count)> CPC::_ConsumeItemForSkill;
	static hook_method<int (CPC::*)(unsigned short itemNum, int count, int spCost)> CPC::_ConsumeJamstone;
	static hook_method<int (CPC::*)(short cnt)> CPC::_ConsumeEquipedArrow;
	static hook_method<unsigned long (CPC::*)(void)> CPC::_GetGroupIDIFexpShare;
	static hook_method<int (CPC::*)(void)> CPC::_GetMaxHP;
	static hook_method<short (CPC::*)(void)> CPC::_GetMaxSP;
	static hook_method<int (CPC::*)(void)> CPC::_GetAttackMotionTime;
	static hook_method<int (CPC::*)(void)> CPC::_GetAttackedMotionTime;
	static hook_method<void (CPC::*)(unsigned long targetAID, int contentLength, char* buf)> CPC::_PurchaseItemFromMCStore;
	static hook_method<void (CPC::*)(unsigned long NAID, unsigned char type)> CPC::_SelectDealType;
	static hook_method<void (CPC::*)(int leftLen, char* buf)> CPC::_PurchaseItem;
	static hook_method<void (CPC::*)(int leftLen, char* buf)> CPC::_SellItem;
	static hook_method<void (CPC::*)(unsigned long AID)> CPC::_ReqExchangeItem;
	static hook_method<void (CPC::*)(unsigned char result)> CPC::_AckReqExchangeItem;
	static hook_method<void (CPC::*)(short index, int count)> CPC::_AddExchangeItem;
	static hook_method<void (CPC::*)(void)> CPC::_ConcludeExchangeItem;
	static hook_method<void (CPC::*)(void)> CPC::_CancelExchangeItem;
	static hook_method<void (CPC::*)(int len, char* buf)> CPC::_Send;
	static hook_method<void (CPC::*)(int len, char* buf)> CPC::_ForceSend;
	static hook_method<void (CPC::*)(Request* request)> CPC::_OnDispatchClientRequest;
	static hook_method<void (CPC::*)(void)> CPC::_CloseStore;
	static hook_method<int (CPC::*)(void)> CPC::_IsStoreOpen;
	static hook_method<void (CPC::*)(MAKABLEITEM_INFO* info)> CPC::_ReqMakingItem;
	static hook_method<void (CPC::*)(unsigned long GID)> CPC::_ReqNameByGID;
	static hook_method<void (CPC::*)(int money)> CPC::_AddMoney;
	static hook_method<void (CPC::*)(int money)> CPC::_DeleteMoney;
	static hook_method<int (CPC::*)(void)> CPC::_GetMoney;
	static hook_method<void (CPC::*)(int len, char* buf)> CPC::_OnReqOpenMCStore;
	static hook_method<void (CPC::*)(unsigned long AID)> CPC::_OnReqItemListFromMCStore;
	static hook_method<void (CPC::*)(unsigned long AID)> CPC::_NotifyMCStore;
	static hook_method<void (CPC::*)(Request* request)> CPC::_Save;
	static hook_method<void (CPC::*)(void)> CPC::_CancelMCStore;
	static hook_method<double (CPC::*)()> CPC::_GetAttackDistance;
	static hook_method<int (CPC::*)(void)> CPC::_ChkGndSkillDurability;
	static hook_method<void (CPC::*)(int sppoint)> CPC::_SetSPPoint;
	static hook_method<void (CPC::*)(void)> CPC::_OnResetStat;
	static hook_method<void (CPC::*)(void)> CPC::_OnResetSkill;
	static hook_method<void (CPC::*)(void)> CPC::_InitEnemyInfo;
	static hook_method<int (CPC::*)(void)> CPC::_IsInitingState;
	static hook_method<int (CPC::*)(void)> CPC::_IsLucky;
	static hook_method<void (CPC::*)(void)> CPC::_PingSend;
	static hook_method<unsigned long (CPC::*)(void)> CPC::_GetDisconnectTime;
	static hook_method<unsigned long (CPC::*)(void)> CPC::_GetIp;
	static hook_method<CAsyncStream* (CPC::*)(void)> CPC::_GetStream;
	static hook_method<CharacterInfo* (CPC::*)(void)> CPC::_GetCharacterInfo;
	static hook_method<CPCBattle* (CPC::*)(void)> CPC::_GetPCBattle;
	static hook_method<int (CPC::*)(void)> CPC::_GetDesX;
	static hook_method<int (CPC::*)(void)> CPC::_GetDesY;
	static hook_method<int (CPC::*)(void)> CPC::_GetPVPWinPoint;
	static hook_method<void (CPC::*)(int pvpWinPoint)> CPC::_SetPVPWinPoint;
	static hook_method<void (CPC::*)(int winpvpWinPoint)> CPC::_UpdatePVPWinPoint;
	static hook_method<void (CPC::*)(int ranking)> CPC::_SetPVPRanking;
	static hook_method<int (CPC::*)(void)> CPC::_GetPVPRanking;
	static hook_method<void (CPC::*)(int total)> CPC::_SetPVPTotal;
	static hook_method<int (CPC::*)(void)> CPC::_GetPVPTotal;
	static hook_method<void (CPC::*)(int effectID)> CPC::_MulticastEffect;
	static hook_method<CNPC* (CPC::*)(int spriteType, int xPos, int yPos, const char* mapName, const char* npcName, int parentAID, int npcType)> CPC::_CallMonster;
	static hook_method<void (CPC::*)(IVItEquipItem* item)> CPC::_CallPet;
	static hook_method<void (CPC::*)(void)> CPC::_RemovePet;
	static hook_method<int (CPC::*)(void)> CPC::_GetPetRelationship;
	static hook_method<void (CPC::*)(int spriteType, int relationship)> CPC::_Gangsi_PetSkill;
	static hook_method<void (CPC::*)(void)> CPC::_Gangsi_ResetEFST;
	static hook_method<int (CPC::*)(void)> CPC::_IsPetActive;
	static hook_method<void (CPC::*)(unsigned short id, int value)> CPC::_SetParameterValue;
	static hook_method<void (CPC::*)(int type)> CPC::_OnEmotion;
	static hook_method<void (CPC::*)(unsigned long NAID)> CPC::_ReStart;
	static hook_method<int (CPC::*)(int GDID)> CPC::_IsGuildMaster;
	static hook_method<int (CPC::*)(void)> CPC::_GetGDID;
	static hook_method<int (CPC::*)(void)> CPC::_IsMyAgitCase;
	static hook_method<int (CPC::*)(void)> CPC::_IsReadyToSave;
	static hook_method<int (CPC::*)(int money)> CPC::_ModifyMoney;
	static hook_method<int (CPC::*)(unsigned long GDID)> CPC::_IsAlly;
	static hook_method<int (CPC::*)(CCharacter* other, int isAllyCHK)> CPC::_IsMyGuildMember;
	static hook_method<int (CPC::*)(void)> CPC::_GetPartyItemPickupRule;
	static hook_method<int (CPC::*)(void)> CPC::_GetPartyItemDivisionRule;
	static hook_method<int (CPC::*)(void)> CPC::_GetDamagedItemNum;
	static hook_method<void (CPC::*)(void)> CPC::_RepairDamagedItem;
	static hook_method<void (CPC::*)(int n)> CPC::_SetEventNo;
	static hook_method<int (CPC::*)(void)> CPC::_GetEventNo;
	static hook_method<int (CPC::*)(void)> CPC::_IsBadGuy;
	static hook_method<void (CPC::*)(int event)> CPC::_OnEnableItemMove;
	static hook_method<void (CPC::*)(void)> CPC::_OnDisableItemMove;
	static hook_method<int (CPC::*)(void)> CPC::_IsItemMovable;
	static hook_method<void (CPC::*)(void)> CPC::_ServerMove;
	static hook_method<void (CPC::*)(void)> CPC::_CheckWeaponState;
	static hook_method<char* (CPC::*)(void)> CPC::_GetCharacterName;
	static hook_method<void (CPC::*)(unsigned long gid)> CPC::_OnMakeCouple;
	static hook_method<void (CPC::*)(void* info, int flag)> CPC::_SetCoupleInfo;
	static hook_method<void (CPC::*)(CCharacter* ch)> CPC::_SetEffectByGospel;
	static hook_method<void (CPC::*)(int effect)> CPC::_OnShowEffect;
	static hook_method<void (CPC::*)(int effect, int numdata)> CPC::_OnShowEffect3;
	static hook_method<int (CPC::*)(void)> CPC::_GetEffectState;
	static hook_method<void (CPC::*)(unsigned long AID, CITZMsg* reqMsg)> CPC::_OnMsgFromItemServer;
	static hook_method<void (CPC::*)(void)> CPC::_DeleteMarriagering;
	static hook_method<void (CPC::*)(void)> CPC::_InitMobileEvent;
	static hook_method<void (CPC::*)(unsigned long gid1, unsigned long gid2)> CPC::_OnMakeFamily;
	static hook_method<void (CPC::*)(void* info, int flag)> CPC::_SetFamilyInfo;
	static hook_method<BOOL (CPC::*)(unsigned long AID, int& exPos, int& eyPos, int dir, int distance, int flag)> CPC::_MoveForward;
	static hook_method<void (CPC::*)(int type)> CPC::_SetReadyMotion;
	static hook_method<void (CPC::*)(void)> CPC::_SetPlusMakerPower;
	static hook_method<int (CPC::*)(void)> CPC::_IsCrazyKiller;
	static hook_method<int (CPC::*)(void)> CPC::_IsGiveExpToCrazyKiller;
	static hook_method<int (CPC::*)(void)> CPC::_IsPossibleToGetExp;
	static hook_method<void (CPC::*)(void)> CPC::_ProcessPKInfo;
	static hook_method<int (CPC::*)(void)> CPC::_SavePKInfo;
	static hook_method<int (CPC::*)(CPC* winner, CPC* loser)> CPC::_UpdatePKInfo;
	static hook_method<void (CPC::*)(int win, int lose, char* kill_name, char* killed_name, int bLoserCrazyKiller)> CPC::_SetPKInfo;
	static hook_method<void (CPC::*)(void)> CPC::_SetKillerSystem;
	static hook_method<void (CPC::*)(void)> CPC::_NotifyPKInfo;
	static hook_method<void (CPC::*)(void)> CPC::_GetPKInfo;
	static hook_method<void (CPC::*)(void)> CPC::_CheckPalmStrike;
	static hook_method<void (CPC::*)(CCharacter* sender, CCharacter* attacker, CCharacter* target, int damage, short count, short level, unsigned short SKID)> CPC::_NotifySkillAction;
	static hook_method<char* (CPC::*)(void)> CPC::_GetRestartMapName;
	static hook_method<void (CPC::*)(void)> CPC::_ResetItemScriptEvent;
	static hook_method<void (CPC::*)(int sp)> CPC::_ReduceSPByUseSkill;
	static hook_method<bool (CPC::*)(int itemID, int count, bool isExternalEffect)> CPC::_IsExistItem;
	static hook_method<bool (CPC::*)(int itemID, int count, bool isExternalEffect)> CPC::_ConsumeItemByUseSkill;
	static hook_method<short (CPC::*)(CCharacter* other, int isRangeAttack)> CPC::_GetAttackSuccessPercent;
	static hook_method<int (CPC::*)(CCharacter* other, int position, int skillProperty, int plusATTPowerPercent, int plusATTSuccessPercent, int type, int isRangeAttack, unsigned short SKID, short skLevel)> CPC::_GetAttackFinalDamage2;
	static hook_method<int (CPC::*)(ATTACK_INFO* info)> CPC::_GetAttackFinalDamage;
	static hook_method<bool (CPC::*)(void)> CPC::_IsDeadState;
	static hook_method<void (CPC::*)(int len, char* packet, bool isIncludeSelf)> CPC::_SendPacketToPartyInMap;
	static hook_method<void (CPC::*)(int len, char* packet)> CPC::_SendPacketToPartyInMapOuterRange;
	static hook_method<short (CPC::*)(void)> CPC::_GetBodyState;
	static hook_method<void (CPC::*)(char campID, short xPos1, short yPos1, bool isSaveFlag)> CPC::_SetBattleFieldInfo;
	static hook_method<bool (CPC::*)(unsigned long AID, int hp, int mhp, const char* name)> CPC::_NotifyHPToBattleFieldCamp;
	static hook_method<void (CPC::*)(unsigned long AID, int hp, int mhp)> CPC::_BroadcastHP;
	static hook_method<void (CPC::*)(void)> CPC::_BroadcastHP2;
	static hook_method<void (CPC::*)(void)> CPC::_ClearDevotionList;
	static hook_method<bool (CPC::*)(const int in_ITID)> CPC::_IsMapPropertyBlockEquipItem;
	static hook_method<void (CPC::*)(void)> CPC::_CheckMove;
	static hook_method<void (CPC::*)(void)> CPC::_CheckStateChange;
	static hook_method<void (CPC::*)(unsigned long tick)> CPC::_CheckSpecialState;
	static hook_method<void (CPC::*)(void)> CPC::_CheckMannerPoint;
	static hook_method<void (CPC::*)(void)> CPC::_CheckGuildPassiveSkill;
	static hook_method<void (CPC::*)(void)> CPC::_CheckTouchNPCList;
	static hook_method<int (CPC::*)(int range)> CPC::_IsMovableAround;
	static hook_method<void (CPC::*)(void)> CPC::_WarpBetweenServer;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnCheckPoint;
	static hook_method<void (CPC::*)(int par)> CPC::_DispatchCommand;
	static hook_method<void (CPC::*)(void)> CPC::_DisableAllCommand;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnExecExchangeItem;
	static hook_method<void (CPC::*)(void)> CPC::_ResetExchangeItemInfo;
	static hook_method<void (CPC::*)(void)> CPC::_CartOff;
	static hook_method<void (CPC::*)(void)> CPC::_MultiCastStateInfo;
	static hook_method<void (CPC::*)(void)> CPC::_SaveWarpInfo;
	static hook_method<void (CPC::*)(void)> CPC::_NotifyInfoToSection;
	static hook_method<int (CPC::*)(void)> CPC::_GetPartyInMyMapTotalLevel;
	static hook_method<int (CPC::*)(void)> CPC::_GetPartyInMyMapTotalNextExp;
	static hook_method<int (CPC::*)(void)> CPC::_GetPartyMemberCountInMyMap;
	static hook_method<void (CPC::*)(int par1, int par2)> CPC::_OnAddMemberToGroup;
	static hook_method<void (CPC::*)(int par1, int par2)> CPC::_OnDeleteMemberFromGroup;
	static hook_method<void (CPC::*)(int par1, int par2)> CPC::_OnAckMakeGroup;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnGroupList;
	static hook_method<void (CPC::*)(int par1, int par2)> CPC::_OnAckReqJoinGroup;
	static hook_method<void (CPC::*)(int par1, int par2)> CPC::_OnReqJoinGroup;
	static hook_method<void (CPC::*)(CCharacter* ch, int par1, int par2, int par3)> CPC::_OnNotifyPositionParty;
	static hook_method<void (CPC::*)(CCharacter* ch, int par1, int par2, int par3)> CPC::_OnNotifyPositionGuild;
	static hook_method<void (CPC::*)(CCharacter* ch, int par1, int par2, int par3)> CPC::_OnNotifyHpParty;
	static hook_method<void (CPC::*)(int par1, int par2)> CPC::_OnGRIDUpdate;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnChatParty;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnDeleteFromGroupLIst;
	static hook_method<void (CPC::*)(unsigned long commandID)> CPC::_DeleteCommand;
	static hook_method<void (CPC::*)(CCharacter* sender, int exp, int par1)> CPC::_OnAddExp;
	static hook_method<void (CPC::*)(CCharacter* sender, int exp)> CPC::_AddExp;
	static hook_method<void (CPC::*)(CCharacter* sender, int par1, int par2, int par3)> CPC::_OnAddJobExp;
	static hook_method<void (CPC::*)(CCharacter* sender, int exp)> CPC::_AddJobExp;
	static hook_method<int (CPC::*)(void)> CPC::_IsShareEnable;
	static hook_method<void (CPC::*)(CCharacter* sender, int par1)> CPC::_OnShareExp;
	static hook_method<void (CPC::*)(CCharacter* sender, int par1)> CPC::_OnShareJobExp;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnAddPartyExp;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnAddPartyJOBExp;
	static hook_method<void (CPC::*)(int virtue)> CPC::_OnAddVirtue;
	static hook_method<void (CPC::*)(unsigned long enemyAID, int& isRestart)> CPC::_OnDead;
	static hook_method<void (CPC::*)(void)> CPC::_OnNotifyMakableWeaponItemList;
	static hook_method<void (CPC::*)(void)> CPC::_OnNotifyMakableMetalItemList;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnMVPItem;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnMVPExp;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnAddSkill;
	static hook_method<void (CPC::*)(void)> CPC::_MultiCastMVP;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnSkillLevelUp;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnHPPlus;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnSPPlus;
	static hook_method<void (CPC::*)(int SKID, int target, int level, int spCost)> CPC::_OnUseSkill;
	static hook_method<void (CPC::*)(int par1, int par2, int skLevel, int spCost)> CPC::_OnUseGroundSkill;
	static hook_method<void (CPC::*)(int SKID, int par2, int par3)> CPC::_ActSkillToChar_SpATK;
	static hook_method<void (CPC::*)(int SKID, int target, int par1)> CPC::_OPSkillToRangeGuild;
	static hook_method<void (CPC::*)(int SKID, int target, int par1)> CPC::_OPSkillToGuild;
	static hook_method<void (CPC::*)(int SKID, int tarAID, int SKInfo)> CPC::_AttSkillToChar22_1;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_SPAttSkillToChar22_1;
	static hook_method<void (CPC::*)(int SKID, int target, int par1)> CPC::_SPAttSkillToChar22_2;
	static hook_method<void (CPC::*)(int SKID, int tarAID, int SKInfo)> CPC::_OperSkillToChar22_1;
	static hook_method<int (CPC::*)(const int in_SKID, const int in_SKLevel, const int in_SPcost, const int in_ConsumeItemID, const int in_Data2, const int in_FailProbabilityFactor, CCharacter* const in_pTargetCh)> CPC::_OperSkillToChar22_1_SA_family;
	static hook_method<void (CPC::*)(int SKID, int tarAID, int SKInfo)> CPC::_OperSkillToSelf22_1;
	static hook_method<void (CPC::*)(int SKID, int tarAID, int SKInfo)> CPC::_OnGroundSkill22_1;
	static hook_method<void (CPC::*)(CCharacter* ch, MSG_TYPE4_FIVEDWORD* data, int par1)> CPC::_OnTouchedSkillObj22_1;
	static hook_method<void (CPC::*)(CCharacter* other, MSG_TYPE4_FIVEDWORD* data, int par1)> CPC::_OnTouchedSkillObj22_2;
	static hook_method<void (CPC::*)(int flag)> CPC::_CancelCasting;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnAutoSpellList;
	static hook_method<void (CPC::*)(int maxHP, int maxSP, int weightPercent)> CPC::_ApplyPlusHpSp;
	static hook_method<void (CPC::*)(void)> CPC::_AM_ReqMakingHomun;
	static hook_method<void (CPC::*)(int SKID, int target, int param)> CPC::_AttSkillToChar22_2;
	static hook_method<void (CPC::*)(int SKID, int target, int param, MSGpar::CVar in_var)> CPC::_OperSkillToChar22_2;
	static hook_method<void (CPC::*)(int SKID, int target, int param)> CPC::_OperSkillToSelf22_2;
	static hook_method<void (CPC::*)(int SKID, int target, int param)> CPC::_OnGroundSkill22_2;
	static hook_method<int (CPC::*)(SKILLATTACK_MSG* msg, int plusATTPowerPercent, int plusATTSuccessPercent, const bool in_bSilenceSkill)> CPC::_SkillAttack;
	static hook_method<short (CPC::*)(int val1, short xPos, short yPos, int type, int range, int rangeIn, unsigned long exceptAID, void* msgDataPtr, int val2, int count)> CPC::_SplashAttack;
	static hook_method<int (CPC::*)(int plusATTPower, PosInfo dest, int type, int halfWidth, int height, MSG_TYPE1_TWODWORD* msgData, int count, int plusHitPercent, PosInfo* specialSrc)> CPC::_SplashAttack2;
	static hook_method<void (CPC::*)(int plusATTPower, PosInfo dest, int type, MSG_TYPE1_TWODWORD* msgData, int range, int count)> CPC::_SplashAttack3;
	static hook_method<void (CPC::*)(int plusATTPower, CCharacter* src, CCharacter* other, int destDir, int type, unsigned short SKID, int count, mystd::map<CCharacter *,CollideInfo>& collidedList)> CPC::_CollideSplashAttack;
	static hook_method<int (CPC::*)(int weaponLevel, int refiningLevel)> CPC::_AddRandomAttackPower;
	static hook_method<void (CPC::*)(int AID, int par1, int bisSectionMove)> CPC::_OnTouchedSkillObject;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnHealHP;
	static hook_method<void (CPC::*)(int SKID, int par2, int par3)> CPC::_OnGroundSkill;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnTeleportCharacter;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnWarpCharacter;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnWarpPositionRemember;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnStarPlaceRemember;
	static hook_method<void (CPC::*)(CCharacter* sender, int par1, int par2, int par3)> CPC::_OnBlessingFromAcolyte;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnPlusAttRangeOnVulture;
	static hook_method<void (CPC::*)(int amount)> CPC::_OnIncCarry;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnIncCarry2;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnSgDevil;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnSgFriend;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnVending;
	static hook_method<void (CPC::*)(int par1, const int in_CauseSKID)> CPC::_OnResurrection;
	static hook_method<void (CPC::*)(int xPos, int yPos, int par3)> CPC::_OnMoveStop;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnGroupInfoChange;
	static hook_method<void (CPC::*)(int par1, int par2)> CPC::_ReqGroupInfoChangeV2;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnDlgWrite;
	static hook_method<void (CPC::*)(int npcID)> CPC::_OnDlgWriteStr;
	static hook_method<void (CPC::*)(int par1, int par2)> CPC::_OnHealByPercent;
	static hook_method<void (CPC::*)(int NAID, int type, int msg)> CPC::_OnCompass;
	static hook_method<void (CPC::*)(int type, int imageName)> CPC::_OnShowImage;
	static hook_method<void (CPC::*)(int where, int palattetype)> CPC::_OnChangePalette;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnChangeAGI;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnChangeDEX;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnChangeINT;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnChangeLUK;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnChangeSTR;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnChangeVIT;
	static hook_method<void (CPC::*)(void)> CPC::_OnCureFromAcolyte;
	static hook_method<void (CPC::*)(int par1)> CPC::_OnNotifyItemInfoInMCStore;
	static hook_method<IVItItem* (CPC::*)(int ID, int type, int par, int Hour, bool isUniqueIdentityNumV2)> CPC::_OnAddItem;
	static hook_method<void (CPC::*)(void)> CPC::_OnAddReservedEmpeliumItem;
	static hook_method<void (CPC::*)(CCharacter* sender, int type, int point)> CPC::_OnNotifyMannerPointGiven;
	static hook_method<void (CPC::*)(int par1, int par2, int par3)> CPC::_OnItemIdentifySkill;
	static hook_method<void (CPC::*)(int loc)> CPC::_OnSuccessOfItemRef;
	static hook_method<void (CPC::*)(int loc)> CPC::_OnFailureOfItemRef;
	static hook_method<void (CPC::*)(unsigned long var)> CPC::_OnStandardStatChange;
	static hook_method<void (CPC::*)(int point)> CPC::_OnPVPPlusPoint;
	static hook_method<void (CPC::*)(int ranking, int total)> CPC::_OnNotifyRankingInfo;
	static hook_method<short (CPC::*)(void)> CPC::_GetCurrentState;
	static hook_method<void (CPC::*)(short state)> CPC::_SetBodyState;
	static hook_method<void (CPC::*)(short state)> CPC::_SetHealthState;
	static hook_method<void (CPC::*)(short state)> CPC::_SetCurrentState;
	static hook_method<void (CPC::*)(unsigned long AID)> CPC::_AddGroupMember;
	static hook_method<void (CPC::*)(unsigned long AID)> CPC::_DeleteGroupMember;
	static hook_method<void (CPC::*)(void)> CPC::_ResetGroupMember;
	static hook_method<void (CPC::*)(int range, SKILLATTACK_MSG* msg, int plusAttPower, int deltaX, int deltaY)> CPC::_DetectHidingCharacter;
	static hook_method<void (CPC::*)(CCharacter* ch, short dist, int time, short who)> CPC::_KnuckBack;
	static hook_method<void (CPC::*)(unsigned short SKID, short level, short xPos, short yPos, unsigned long startTime)> CPC::_NotifyGroundSkillUsing;
	static hook_method<void (CPC::*)(int xPos, int yPos, int destDir, int distance, PosInfo& result)> CPC::_GetPushedPosition2;
	static hook_method<int (CPC::*)(int state, CCharacter* other, int percent, int preDelayTime, int delayTime, int isSpell, int isFixedDelayTime)> CPC::_SetHandicapState;
	static hook_method<int (CPC::*)(CCharacter* target)> CPC::_GetModifiedTargetItemDEF;
	static hook_method<int (CPC::*)(CCharacter* target)> CPC::_GetModifiedTargetItemMDEF;
	static hook_method<int (CPC::*)(int index, int time, int val1, int val2, int val3, int isSendClient)> CPC::_SetEffective;
	static hook_method<void (CPC::*)(int index, int val)> CPC::_ResetEffective;
	static hook_method<bool (CPC::*)(int index, int& SKID, bool& isPlaySolo)> CPC::_IsGroundEffective;
	static hook_method<void (CPC::*)(int index, int SKID, bool isPlaySolo)> CPC::_ProcessGroundEffective;
	static hook_method<void (CPC::*)(int value)> CPC::_SetOnShowEFST;
	static hook_method<void (CPC::*)(int value)> CPC::_SetOffShowEFST;
	static hook_method<void (CPC::*)(int SKID, unsigned short type, unsigned long time, int amount)> CPC::_OnChangeStatusAmount;
	static hook_method<void (CPC::*)(unsigned short type, int amount)> CPC::_NotifyStatusAmount;
	static hook_method<char (CPC::*)(void)> CPC::_GetCampID;
	static hook_method<void (CPC::*)(char campID)> CPC::_SetCampID;
	static hook_method<const char* (CPC::*)(void)> CPC::_GetNamePtr;
	static hook_method<short (CPC::*)(void)> CPC::_GetHealthState;
	static hook_method<void (CPC::*)(short state)> CPC::_ResetHealthState;
	static hook_method<void (CPC::*)(unsigned long time, int state)> CPC::_SetEffectStateTimeInfo;
	static hook_method<void (CPC::*)(int state)> CPC::_ResetEffectState;
	static hook_method<void (CPC::*)(int state)> CPC::_SetEffectState;
	static hook_method<int (CPC::*)(unsigned short id, int& value)> CPC::_GetBodyItemCount;
	static hook_method<int (CPC::*)(unsigned short id, int count, bool isidentified)> CPC::_UpdateBodyItemCount;
	static hook_method<int (CPC::*)(unsigned short id, int count, bool isidentified)> CPC::_UpdateBodyItemCountByNPC;
	static hook_method<void (CPC::*)(unsigned short SKID, unsigned short NUM, bool result, unsigned char cause)> CPC::_SkillUseAck;
	static hook_method<void (CPC::*)(CCharacter* ch, int attackProperty, int& damage)> CPC::_ModifyAttackPowerByEffective;
	static hook_method<void (CPC::*)(int& def, CCharacter* in_cpAtkerCH)> CPC::_ApplyExtraDEF;
	static hook_method<void (CPC::*)(int& def)> CPC::_ApplyExtraMDEF;
	static hook_method<void (CPC::*)(void)> CPC::_InitTime;
	static hook_method<int (CPC::*)(void)> CPC::_GetLockCounter;
	static hook_method<void (CPC::*)(int count)> CPC::_ModifyLockCounter;
	static hook_method<void (CPC::*)(void)> CPC::_OnDamagedWeapon;
	static hook_method<void (CPC::*)(void)> CPC::_OnDamagedArmor;
	static hook_method<void (CPC::*)(int type)> CPC::_OnDamageEquipment;
	static hook_method<void (CPC::*)(int petMsg, int par1)> CPC::_SendMsgToPet;
	static hook_method<int (CPC::*)(void)> CPC::_ConvertPetToPetEgg;
	static hook_method<CNpcPet* (CPC::*)(void)> CPC::_GetMyPetObject;
	static hook_method<int (CPC::*)(unsigned short item)> CPC::_OnUsePetAcc;
	static hook_method<int (CPC::*)(unsigned short item)> CPC::_IsPetWearable;
	static hook_method<int (CPC::*)(void)> CPC::_CheckGameGuard;
	static hook_method<void (CPC::*)(void)> CPC::_OnCM_NOTIFY_STOREDITEM;
	static hook_method<void (CPC::*)(void)> CPC::_OnCM_NOTIFY_CASHITEM;
	static hook_method<void (CPC::*)(const unsigned char* in_pData, const int in_Length)> CPC::_LoadEffectiveInfo;
	static hook_method<int (CPC::*)(unsigned char* out_Data, const int in_MaxBytes)> CPC::_GetEffectiveDBFmt;
	static hook_method<void (CPC::*)(int ITID)> CPC::_OnConSumeSpecialItem;
	static hook_method<void (CPC::*)(int mob)> CPC::_OnHuntingList;
	static hook_method<void (CPC::*)(void)> CPC::_LoadHuntingList;
	static hook_method<void (CPC::*)(void)> CPC::_LoadTimeList;
	static hook_method<bool (CPC::*)(unsigned short efstType, int val)> CPC::_IsEnableSetEFSTFood;
	static hook_method<void (CPC::*)(unsigned short msg)> CPC::_SendZCMsg;
	static hook_method<void (CPC::*)(char* packet)> CPC::_OnNotifyBossInfo;
	static hook_method<void (CPC::*)(int mob)> CPC::_OnQuestHuntingList;
	static hook_method<void (CPC::*)(unsigned short SKID, unsigned long delaytime)> CPC::_SetSkillSinglePostDelay;
	static hook_method<int (CPC::*)(void)> CPC::_IsFirstJobORLowLevel;
	static hook_method<void (CPC::*)(int bFlag)> CPC::_SetMapLoadingFlag;
	static hook_method<int (CPC::*)(void)> CPC::_isAuctionOpen;
	static hook_method<int (CPC::*)(void)> CPC::_isMailOpen;
	static hook_method<void (CPC::*)(void)> CPC::_AuctionOpen;
	static hook_method<void (CPC::*)(void)> CPC::_MailOpen;
	static hook_method<void (CPC::*)(int Index, ShortCutKey SCKey)> CPC::_OnShortcutKey_Change;
	static hook_method<void (CPC::*)(void)> CPC::_SendShortCutKeyInfo;
	static hook_method<void (CPC::*)(void)> CPC::_ScriptTimeClear;
	static hook_method<void (CPC::*)(int key)> CPC::_SetScriptTime;
	static hook_method<int (CPC::*)(int key)> CPC::_GetScriptTime;

	friend class CHSvrIOPacketHandler;
	friend class CNPCUpdater;
	friend class CPCClientUpdater;
	friend class CPCItemInventoryMgr;
	friend class CPCPacketHandler;
	friend class CPCBattle; // needs CPC::SetHandicapState()
};
